草庐IT

c# - 为什么 C# 编译器显式声明一个类型实现的所有接口(interface)?

C#编译器似乎明确指出它的所有接口(interface)及其基类实现。CLI规范说这不是必需的。我已经看到其他一些编译器没有明确发出这个,而且它似乎工作正常。C#这样做有什么区别或原因吗?底层的C#为B生成的MSIL是:.classprivateautoansibeforefieldinitBextendsAimplementsIAdvanced,ISimple它不需要指定ISimple,因为A像IAdvanced一样实现它。C#代码:interfaceISimple{intBasic{get;}intZero{get;}}interfaceIAdvanced:ISimple{stri

c# - 为什么对泛型的显式接口(interface)调用总是调用基础实现?

为什么在具有接口(interface)类型约束的泛型方法中显式C#接口(interface)调用总是调用基实现?例如,考虑以下代码:publicinterfaceIBase{stringMethod();}publicinterfaceIDerived:IBase{newstringMethod();}publicclassFoo:IDerived{stringIBase.Method(){return"IBase.Method";}stringIDerived.Method(){return"IDerived.Method";}}staticclassProgram{staticvo

c# - IDisposable 的显式实现

虽然在SO上可以找到很多关于IDisposable的问答,但我还没有找到答案:我通常遵循的做法是,当我的一个类拥有一个IDisposable对象时,它也会实现IDisposable并在拥有的对象上调用Dispose目的。但是最近我遇到了一个显式实现了IDisposable的类,从而阻止我直接调用Dispose强制我强制转换它,我觉得这很烦人而且没有必要。那么问题来了:为什么以及何时要使用IDisposable的显式接口(interface)实现?我知道显式实现接口(interface)有非常好的和正当的理由,但关于IDisposable的原因对我来说不是很清楚。

c# - 使用自动属性显式实现接口(interface)

有没有办法使用自动属性显式实现接口(interface)?例如,考虑这段代码:namespaceAutoProperties{interfaceIMyInterface{boolMyBoolOnlyGet{get;}}classMyClass:IMyInterface{staticvoidMain(){}publicboolMyBoolOnlyGet{get;privateset;}//line1//boolIMyInterface.MyBoolOnlyGet{get;privateset;}//line2}}此代码编译。但是,如果您将第1行替换为第2行,它不会编译。(并不是说我需要让

c# - 为什么 List<double> 显式转换为 IEnumerable<object> 会抛出异常?

根据这个MSDNreferenceIEnumerable是协变的,这可以将对象列表隐式转换为可枚举对象:IEnumerablestrings=newList();IEnumerableobjects=strings;在我自己的代码中,我写了一行代码,当列表的项目类型是Point类时,它可以完美运行(Point是一个简单的类,具有三个双x、y、z属性):varobjects=(IEnumerable)dataModel.Value;//herepropertyValueisalistthatcouldbeofanytype.但是当列表的项类型为double时,上面的代码返回以下异常:Un

c# - 如何在不显式创建类的情况下创建要传递的临时对象?

我经常发现自己需要创建一个类作为某些数据的容器。它只被短暂使用,但我仍然必须创建类。像这样:publicclassTempObject{publicstringLoggedInUsername{get;set;}publicCustomObjectSomeCustomObject{get;set;}publicDateTimeLastLoggedIn{get;set;}}publicvoidDoSomething(){TempObjecttemp=newTempObject{LoggedInUsername="test",SomeCustomObject=//blahblahblah,

C# 显式删除事件处理程序

我想知道将对象设置为null是否会清除所有附加到对象事件的事件处理程序...例如Buttonbutton=newButton();button.Click+=newEventHandler(Button_Click);button=null;button=newButton();button.Click+=newEventHandler(Button_Click);button=null;等...会不会造成内存泄漏? 最佳答案 如果在任何地方都没有对button的其他引用,那么就没有必要在此处删除事件处理程序以避免内存泄漏。事件处理

c# - 使用抽象方法显式实现接口(interface)

这是我的界面:publicinterfaceMyInterface{boolFoo();}这是我的抽象类:publicabstractclassMyAbstractClass:MyInterface{abstractboolMyInterface.Foo();}这是编译器错误:“修饰符‘抽象’对于此项无效。我应该如何继续使用抽象方法显式实现抽象? 最佳答案 基本上,你不能。反正不是直接的。您不能覆盖显式实现接口(interface)的方法,并且您必须覆盖抽象方法。最接近的是:boolMyInterface.Foo(){returnF

c# - 在 Entity Framework 中显式关闭连接

阅读微软文档http://msdn.microsoft.com/en-us/library/bb738684.aspx我看到他们明确地打开和关闭连接using(EntityConnectionconn=newEntityConnection("name=AdventureWorksEntities")){conn.Open();...conn.Close();}为什么这是必要的? 最佳答案 这不是使用EF的“正常”方式。EF通常会为您管理连接。然而:ManagingConnectionsinObjectServices(Entity

c# - 为什么在值类型上调用显式接口(interface)实现会导致它被装箱?

我的问题与这个问题有些相关:Howdoesagenericconstraintpreventboxingofavaluetypewithanimplicitlyimplementedinterface?,但有所不同,因为它根本不是通用的,因此不需要约束来执行此操作。我有密码interfaceI{voidF();}structC:I{voidI.F(){}}staticclassP{staticvoidMain(){Cx;((I)x).F();}}主要方法编译成这样:IL_0000:ldloc.0IL_0001:boxCIL_0006:callvirtinstancevoidI::F()