草庐IT

INTERFACE

全部标签

c# - 为什么一个接口(interface)会实现另一个接口(interface)?

我正在查看List的声明并看到它实现了IList,ICollection和IEnumerable(除其他外)。然后我去看IList的定义并看到它实现了ICollection和IEnumerable.如果一个接口(interface)实现另一个接口(interface)就像“契约(Contract)”一样工作,而我们没有为它们编写真正的代码,那有什么意义呢?这个实现是累积的吗?如果是,因为IList工具ICollection和IEnumerable,List不应该只实现IList?抱歉,如果我的问题令人困惑,我现在有点困惑。 最佳答案

c# - 为什么可以比较不相关的c#接口(interface)引用而不会出现编译错误?

最近我很惊讶地发现编译器在比较接口(interface)引用方面显然并不严格,我想知道为什么它会这样工作。考虑这段代码:classProgram{interfaceI1{}interfaceI2{}classC1:I1{}classC2:I2{}staticvoidMain(string[]args){C1c1=newC1();C2c2=newC2();I1i1=c1;I2i2=c2;boolx=c1==c2;booly=i1==i2;}}编译器说我无法比较c1==c2,如下所示。类型完全不相关。然而,它确实允许我比较i1==i2。我预计它会因编译时失败而出错,但我惊讶地发现您可以将任

c# - 三元运算符语法来选择接口(interface)的实现

这个问题在这里已经有了答案:Implicitconversionissueinaternarycondition[duplicate](4个答案)关闭8年前。我想知道为什么这行代码不能编译:ILogStuffLogger=(_logMode)?newLogToDisc():newLogToConsole();注意LogToDisc和LogToConsole都实现了ILogStuff,_logMode是一个bool变量。我收到的错误消息是:Error3:Typeofconditionalexpressioncannotbedeterminedbecausethereisnoimplici

c# - 获取在 .NET Core 中实现接口(interface)的所有类型

使用反射,如何获取在.NETCore中实现某些特定接口(interface)的所有类型?我注意到.NET4.6中可用的方法不再可用。例如,这段代码不起作用。vartype=typeof(IMyInterface);vartypes=AppDomain.CurrentDomain.GetAssemblies().SelectMany(s=>s.GetTypes()).Where(p=>type.IsAssignableFrom(p));它抛出Thename'AppDomain'doesnotexistinthecurrentcontext错误。 最佳答案

c# - C#中如何通过接口(interface)实现事件?

我有一个问题:假设我有一个基于插件的系统。我需要某种接口(interface),通过它我可以从每个插件捕获事件,该插件实现了例如IReporting接口(interface)。(IReporting)object.OnSomeEvent+=但是我找不到办法做到这一点。 最佳答案 你应该写((IReporting)obj).XXX而不是(IReporting)obj.XXXpublicinterfaceIFoo{eventEventHandlerBoo;}classFoo:IFoo{publiceventEventHandlerBoo

c# - switch 语句是否适用于工厂方法? C#

我想返回一个接口(interface),在switch语句中我想设置它。这是一个糟糕的设计吗?privateIResultEntityGetEntity(char?someType){IResultEntityentity=null;switch(someType){case'L'://lifeentity=newLifeEntity();break;case'P'://propertyentity=newPropertyEntity();break;case'D'://disabilityentity=newDisabilityEntity();break;case'C'://cre

c# - 通用约束如何防止使用隐式实现的接口(interface)对值类型进行装箱?

我的问题与这个问题有些相关:Explicitlyimplementedinterfaceandgenericconstraint.但是,我的问题是编译器如何启用泛型约束以消除对显式实现接口(interface)的值类型进行装箱的需要。我想我的问题可以归结为两个部分:在访问显式实现的接口(interface)成员时要求对值类型进行装箱的幕后CLR实现发生了什么,以及删除此要求的通用约束会发生什么情况?一些示例代码:internalstructTestStruct:IEquatable{boolIEquatable.Equals(TestStructother){returntrue;}}

c# - 如何在 autofac 中注册通用接口(interface)的所有实现?

我已经创建了通用接口(interface),假设将实体映射到View模型并向后映射。我必须在autofac配置中进行大约80次注册。是否可以将它们注册为批处理?这是界面:publicinterfaceICommonMapperwhereTEntity:BaseEntitywhereTModel:BaseEntityViewModelwhereTKey:struct{TModelMapEntityToModel(TEntityentity);TModelMapEntityToModel(TEntityentity,TModelmodel);TEntityMapModelToEntity(

c# - 为什么我不能将我的 COM 对象转换为它在 C# 中实现的接口(interface)?

我在dll中有此接口(interface)(此代码显示在VisualStudio中的元数据中):#regionAssemblyXCapture.dll,v2.0.50727//d:\svn\dashboard\trunk\Source\MockDiagnosticsServer\lib\XCapture.dll#endregionusingSystem;usingSystem.Runtime.InteropServices;namespaceXCapture{[TypeLibType(4160)][Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")

c# - 是否有理由在界面中隐藏继承的成员?

我知道从另一个类继承的类可以使用new关键字隐藏属性。但是,这隐藏了该属性的特定实现,因此我可以了解如何使用它。在实现其他接口(interface)的接口(interface)中隐藏成员是否有任何实际原因?例如考虑下面的例子。IChildInterface实现了IParentInterface,并隐藏了PropertyA。interfaceIParentInterface{stringName{get;set;}intPropertyA{get;set;}intPropertyB{get;set;}}interfaceIChildInterface:IParentInterface{i