草庐IT

INTERFACE

全部标签

c# - 在这种情况下,C# 泛型会阻止结构的自动装箱吗?

通常,将结构S视为接口(interface)I会触发结构的自动装箱,如果经常这样做会对性能产生影响。但是,如果我编写一个采用类型参数T:I的泛型方法并使用S调用它,那么编译器是否会省略装箱,因为它知道类型S并没有使用接口(interface)?这段代码表明了我的观点:interfaceI{voidfoo();}structS:I{publicvoidfoo(){/*dosomething*/}}classY{voiddoFoo(Ii){i.foo();}voiddoFooGeneric(Tt)whereT:I{t.foo();//doFoo方法在I类型的对象上调用foo(),所以一旦我

c# - 如何使用每个实现的附加参数/信息实现接口(interface)

我的MVCwebapp允许用户添加和删除图像。UI在我的业务层中调用ImageService.SaveImage(...),它在内部使用一个标志来告诉方法保存到Azure或文件系统。我最终可能会将S3添加到我认为这里的接口(interface)会很好用。这就是我想象中的代码在我的ImageService类中的样子。它不关心文件的保存方式或位置。//ServicetheUIusespublicstaticclassImageService{publicstaticvoidSaveImage(byte[]data,IImageProviderimageProvider){stringfil

c# - 具有 2 个实现相同接口(interface)的类的 IOC/DI

我对实现相同接口(interface)和依赖注入(inject)的2个类的场景感到困惑。publicinterfaceISomething{voidDoSomething();}publicclassSomethingA:ISomething{publicvoidDoSomething(){}}publicclassSomethingAB:ISomething{publicvoidDoSomething(){}}publicclassDifferent{privateISomethingThisSomething;publicDifferent(ISomethingSomething)

c# - 将接口(interface)上的通用参数限制为子类

以下是人为设计的,但请耐心等待:interfaceClonable{TSubClassClone();}如何限制TSubClass为实现类型?即只让实现者这样做:classDog:Clonable{DogClone(){....}}不是这个:classBadDog:Clonable{RabbitClone(){....}} 最佳答案 你can't只有通过约定和文档才能强制执行....我的惯例是使用类似TSelf的东西。interfaceICloneablewhereTSelf:ICloneable{...}另请注意,任何实现或继承此

c# - 当一个操作数是接口(interface)时,回退到 Object 的 == 运算符的原因是什么?

考虑以下类型:classA{}classB{}interfaceIC{}Aa=null;//thevaluedoesn'tmatter-nulloranythingelse,forallthreeBb=null;ICc=null;以下doesnotcompile:varx=a==b;但是以下确实编译(正如我惊讶地发现的那样):varx=a==c;据我所知,编译器回退到使用默认的==运算符,它是在对象上定义的,因此接受任何类型的参数。IL看起来像这样(忽略ldfld的细节):ldarg.0ldfldclassAaldarg.0ldfldclassICcceqstloc.0换句话说,它使用

c# - 如何使用 TinyIOC 注册通用接口(interface)

假设我有一个通用接口(interface)和一个通用实现。我如何注册所有用途?具体来说,我有以下内容(为简单起见减少了):publicinterfaceIRepositorywhereT:TableEntity{TGetById(stringpartitionKey,stringrowKey);voidInsert(Tentity);voidUpdate(Tentity);voidUpdate(stringpartitionKey,stringrowKey,ActionupdateAction);voidDelete(Tentity);IQueryableTable{get;}}pub

c# - 为什么 ICollection<>.Contains 会忽略我重写的 Equals 和 IEquatable<> 接口(interface)?

我对EntityFramework项目中的导航属性有疑问。这是类MobileUser:[DataContract][Table("MobileUser")]publicclassMobileUser:IEquatable{//constructorsomitted....//////Theprimary-keyofMobileUser.///ThisisnottheVwdIdwhichisstoredinaseparatecolumn///[DataMember,Key,Required,DatabaseGenerated(DatabaseGeneratedOption.Identit

c# - 城堡动态代理 : How to Proxy Equals when proxying an interface?

我需要使用CaSTLeDynamicProxy来代理接口(interface),方法是向ProxyGenerator.CreateInterfaceProxyWithTarget提供接口(interface)实例。我还需要确保对Equals、GetHashCode和ToString的调用命中了我正在传递的具体实例上的方法,但我无法让它工作。换句话说,我希望这个小示例打印两次True,而实际上它打印True,False:usingSystem;usingCastle.Core.Interceptor;usingCastle.DynamicProxy;publicinterfaceIDum

c# - 通过 ref : cannot convert from 'Foo' to 'ref IFoo' 传递实现

这个问题在这里已经有了答案:Whydoesn't'ref'and'out'supportpolymorphism?(10个答案)关闭3年前。有人可以向我解释为什么这在C#中是不正确的吗:namespaceNamespaceA{publicclassClassA{publicinterfaceIInterfaceA{StringProperty{set;}}}}namespaceNamespaceB{publicclassClassB{publicclassImpA:NamespaceA.ClassA.IInterfaceA{privateStringmProperty;publicSt

c# - 在运行时为接口(interface)创建类,在 C# 中

我正在考虑获取一组对象,假设目前有3个对象存在,它们都实现了一个公共(public)接口(interface),然后将这些对象包装在第四个对象中,也实现了相同的接口(interface)。第四个对象的方法和属性的实现将简单地调用这3个底层对象的相关位。我知道这里会有这样做没有意义的情况,但这是针对服务多播架构的,因此已经存在一系列很好的限制。我的问题是从哪里开始。第四个对象的生成应该在运行时在内存中完成,所以我在考虑Reflection.Emit,不幸的是我没有足够的经验甚至不知道从哪里开始。我是否必须构建内存中程序集?它确实看起来是这样,但我只是想要一个快速指向我应该从哪里开始的指针