草庐IT

c# - 为什么C#中同时存在抽象类和接口(interface)?

如果我们可以通过将类中的所有成员都抽象化来实现接口(interface)特性,为什么C#中还要同时存在抽象类和接口(interface)。是不是因为:接口(interface)存在多重继承拥有接口(interface)是有意义的,因为对象的CAN-DO特性应该放在接口(interface)而不是基础抽象类中。请澄清 最佳答案 好吧,一个抽象类可以指定一些实现,但通常不是全部。(话虽如此,完全有可能提供一个没有抽象成员的抽象类,但有大量具有“无操作”实现的虚拟成员)。接口(interface)提供不实现,仅提供契约(Contract)

c# - 多态基础

我现在正在研究继承和多态性,我遇到了这样一个概念,即编译器将评估(使用反射?)什么类型的对象存储在基类型引用中,以便决定在什么方法上运行调用具有覆盖的方法。例如:classShape{publicvirtualvoidDraw(){Console.WriteLine("Drawingshape...");}}classCircle:Shape{publicoverridevoidDraw(){Console.WriteLine("Drawingcircle...");}}staticvoidMain(){ShapetheShape=newCircle();theShape.Draw()

c# - ValidationRule 的执行集-C# 类设计 - 更好的方法

我有一个案例需要为不同的公司执行一组验证规则。将有针对一个公司的多个验证规则。所以我有如下表格结构公司IDCompanyName1ABC2DEF验证规则RuleIDName1Rule12Rule2公司验证规则映射MappingIDCompanyIdRuleID111212322我对每个验证规则都有单独的存储过程。因此,从我的C#代码中,我将找到与公司对应的所有验证规则,并需要执行与该规则关联的验证存储过程。所以我打算保留一个具有不同验证方法的接口(interface)“IValidation”。或者我是否必须为每个实现接口(interface)的验证创建不同的类谁能就此提出更好的方法。

c# - 为什么 String.Contains 不直接调用最终重载?

String.Contains方法在内部看起来像这样publicboolContains(stringvalue){returnthis.IndexOf(value,StringComparison.Ordinal)>=0;}调用的IndexOf重载看起来像这样publicintIndexOf(stringvalue,StringComparisoncomparisonType){returnthis.IndexOf(value,0,this.Length,comparisonType);}这里对最终重载进行了另一个调用,然后使用签名调用相关的CompareInfo.IndexOf方法

c# - 不明确的构造函数调用错误

我有一个类叫做Test它有一个constructor接受Action另一个接受Func.请看下面的片段。publicclassTest{//constructorspublicTest(){}publicTest(Actionaction){}publicTest(Funcaction){}//methodswithsamesignatureofconstructorpublicvoidMyMethod1(Actionaction){}publicvoidMyMethod2(Funcaction){}}publicpartialclassMainWindow:Window{public

c# - 类字段可以密封吗?

在MSDNC#programmingguide,有人提到:"Aclassmember,method,field,property,orevent,onaderivedclassthatisoverridingavirtualmemberofthebaseclasscandeclarethatmemberassealed."我理解上述针对方法、属性和事件的声明,但上述声明如何对类的字段有效?我在一个程序中试过这个,并验证了一个字段不能是虚拟的,因此不能被覆盖。那怎么封呢?如果不能,MSDN引用资料中的上述声明是否应该省略字段的提及?谢谢。 最佳答案

c# - 空接口(interface) vs 属性,通用约束怎么样?

我有一个类,它使用一个空接口(interface)作为“标记接口(interface)”,像这样:namespaceMyNameSpace{publicinterfaceIMessage{//nothingincommonhere...}publicclassMyMessage:IMessage{publicvoidSendMyMessage(){//Dosomethinghere}}}我在其他一些帖子中以及在MSDN(http://msdn.microsoft.com/en-us/library/ms182128.aspx)上读到,应该避免这种情况,您应该使用自定义属性而不是这个空接

c# - 静态代码和实例代码之间的歧义

我的类中有两项:一项是公共(public)属性,另一项是带参数的静态方法。我真的不明白为什么VisualStudio2010看不出这两项之间的区别。有人能给我解释一下吗?代码如下:publicboolIsShipped{get{#region'TestCode'if(!String.IsNullOrEmpty(TrailerNo)||(TruckDate!=Global.NODATE)){returntrue;}#endregionreturnfalse;}}publicstaticboolIsShipped(stringboxNumber){vararray=GetCrate(box

c# - 装饰者模式的实现

尝试从“HeadFirstDesignPatterns”一书中的代码(用Java编写)在C#中实现装饰器模式。我刚开始使用C#,因此对语法还是陌生的,所以我不确定为什么我不能让下面的注释代码行工作。这是装饰器模式中的第一个抽象基类及其派生类:usingSystem;publicabstractclassBeverage{privateStringm_description;//getadescriptionofthebeveragepublicvirtualStringDescription{get{returnm_description;}}//calculatecostoftheb

c# - 事件参数; "sender as Object"或 "sender as T"?

当我为我的业务对象编写公共(public)事件时,除了额外的特定参数外,我已经习惯了始终将实例作为“发送者作为对象”传递。我现在只是问自己为什么我不指定类?所以对于有更多经验的你;您是否曾经在事件中作为发件人传递不同的类别?如果是这样,您的决策标准是什么时候可以/不可以? 最佳答案 不要太极端。EventHandler(objectsender,EventArgse)有一个对象发送器,所以我们可以在很多情况下使用它。但这并不意味着强类型发件人是邪恶的。当此委托(delegate)不会被广泛使用(如EventHandler)时,强类型