Tag: 界面

接口无法声明类型问题C#

这个问题更多的是针对良好的设计实践,而不是exception和堆栈。 我很抱歉一开始并不清楚。 我想在C#中为我的类创建自己的exception。 在Java中,以下概念是完全合法的,因此如果您有一些堆栈的具体实现,您可以实现一致的error handling(或任何其他类型的类) public interface IStack { bool IsEmpty(); int Pop(); void Push(int element); int Size { get; set; } int Top(); public class EmptyException : Exception { } public class SomeOtherClass { } } 当然,在C#中我得到一个错误,说“接口不能声明类型” 确保只实现我的接口的具体类可以访问EmptyException等的最佳方法是什么? 谢谢

接口不包含方法的定义

我有以下两个接口: public interface IMembershipProvider { object Login(ILoginProviderParameters loginParameters); void SetAuthCookie(string userName, bool createPersistentCookie); } public interface IFacebookMembershipProvider : IMembershipProvider{} 和一个恭维: public class FacebookMembershipProvider: IFacebookMembershipProvider { public object Login(ILoginProviderParameters loginParameters) { // Facebook login code is here } public void SetAuthCookie(string userName, bool createPersistentCookie) { FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); } } 这被注入我的控制器并分配给: private readonly IFacebookMembershipProvider _facebookMembershipProvider; 我可以在没有任何问题的情况下调用Login方法,但是当我调用SetAuthCookie方法时: _facebookMembershipProvider.SetAuthCookie(user.id, […]

为什么类现在往往被定义为接口?

去年这2-3个,我看到的许多项目,如Cuyahoga开源C#CMS,倾向于将持久性和非持久性类定义为Interface 。 为什么? 有充分的理由吗? TDD? 惩戒? 一个设计模式? …

将对象转换为通用接口

我有以下界面: internal interface IRelativeTo where T : IObject { T getRelativeTo(); void setRelativeTo(T relativeTo); } 和一堆(应该)实现它的类,例如: public class AdminRateShift : IObject, IRelativeTo { AdminRateShift getRelativeTo(); void setRelativeTo(AdminRateShift shift); } 我意识到这三个不一样: IRelativeTo IRelativeTo IRelativeTo 但是,我需要一种方法来处理所有不同的类,如AdminRateShift(和FXRateShift,DetRateShift),它们都应该实现IRelativeTo。 假设我有一个函数将AdminRateShift作为Object返回: IRelativeTo = getObjectThatImplementsRelativeTo(); // returns Object 通过对接口进行编程,我可以做我需要的,但我实际上无法将对象转换为IRelativeTo,所以我可以使用它。 这是一个微不足道的例子,但我希望它能澄清我想要做的事情。

通用约束如何防止使用隐式实现的接口装箱值类型?

我的问题与此问题有些相关: 显式实现的接口和通用约束 。 然而,我的问题是编译器如何启用通用约束来消除对显式实现接口的值类型进行装箱的需要。 我想我的问题归结为两个部分: 在访问显式实现的接口成员时需要将值类型装箱的幕后CLR实现发生了什么,以及 删除此要求的通用约束会发生什么? 一些示例代码: internal struct TestStruct : IEquatable { bool IEquatable.Equals(TestStruct other) { return true; } } internal class TesterClass { // Methods public static bool AreEqual(T arg1, T arg2) where T: IEquatable { return arg1.Equals(arg2); } public static void Run() { TestStruct t1 = new TestStruct(); TestStruct t2 = […]

如何判断方法返回哪个接口

鉴于此代码段可以轻松粘贴到Linqpad中(或在Visual Studio控制台解决方案中稍作修改): void Main() { var cat = this.GetCat(); var dog = this.GetDog(); cat.Think(); cat.ThinkHarder(); //dog.Think(); // Does not compile. //dog.ThinkHarder(); // Does not compile. //if ([dog is returned as ISmartAnimal]) // What to put here? ((ISmartAnimal)dog).Think(); // Compiles, runs, but shouldn’t. reportTypeProperties(cat); reportTypeProperties(dog); } interface IAnimal { string Name { get; set; } } […]

为什么我们要实现接口?

我们为什么要实现,例如ICloneable或IDisposable。 我不是在问ICloneable或IDisposable是做什么的,但是我想知道实现这些接口的理由是什么,而不仅仅是编写一个处理或克隆我们对象的方法?

将对象同时转换为两个接口,以调用generics方法

我想调用一个约束输入类型T的generics方法来实现两个接口: interface IA { } interface IB { } void foo(T t) where T : IA, IB { } 我怎样才能修复最后一行 void bar(object obj) { if (obj is IA && obj is IB) { foo((IA && IB)obj); } } ? 反思可能允许拨打电话,但我想留在语言中。

.NET – 获取通用接口的所有实现?

关于“ 通过reflection实现接口 ”的答案显示了如何获得接口的所有实现。 但是,给定通用接口IInterface ,以下不起作用: var types = TypesImplementingInterface(typeof(IInterface)) 任何人都可以解释我如何修改该方法?

接口实例化与类实例化

有人可以帮助了解以下代码是否相同。 如果不是类和interfance实例之间的区别。 IUnityContainer container = new UnityContainer() UnityContainer container = new UnityContainer() 据我所知,Inteface只有方法签名,如果接口已经由3个类实现。 不太确定上面的第一个语句将创建3个实例中的哪个。 谢谢。