Tag: 接口

如何在类中实现接口的function?

面试官在采访中问我以下问题,但我不知道这个问题的答案是什么,请帮帮忙! 如果我不想在我的类中实现一个在我的类实现的接口中声明的函数,那么必须要做什么。 编辑:我使用.NET与C#。 如果有人能在C#中提供示例代码示例,那将会很棒。 谢谢

抽象类和接口之间的区别

可能重复: 接口与基类 我不理解抽象类和接口之间的区别。 我什么时候需要使用哪种类型的艺术品?

接口/抽象类编码标准

我发现了一个提议的C#编码标准,其中说“尝试提供一个包含所有抽象类的接口”。 有人知道这个的理由吗?

转到实现的方法而不是接口

通常在浏览代码时,我会遇到这样的事情: public class Fruity { private IOrange _Orange; public Fruity() { _Orange = new Orange() as IOrange; } public void PrepareFruit() { return _Orange.Peel(); } } 太好了,所以现在我想看看Peel方法是如何实现的。 右键单击该方法会给我Go To Definition,它将我带到界面存根。 好的,严格来说,定义是由接口归因的,因为私有变量是以这种方式定义的,但有没有办法去实现? 当然,查找所有引用都是调用,接口和具体化的分散方法。 但在这种情况下,实现的来源是显而易见的,所以我应该能够跳到它我想到的… 显然,有时可能存在歧义,这里描述得很好: 转到具体类型的定义 但可以肯定的是,当实现非常明确时,应该有一个Go To Implementation选项。

编译器说我没有实现我的界面,但我是?

好的,我有两个名称空间。 一个包含我的界面,一个包含实现类。 像这样: namespace Project.DataAccess.Interfaces { public interface IAccount { string SomeMethod(); } } namespace Project.DataAccess.Concrete { class Account : Project.DataAccess.Interfaces.IAccount { string SomeMethod() { return “Test”; } } } 使用此代码我收到一个错误: ‘Project.DataAccess.Concrete.Account’没有实现接口成员’Project.DataAccess.Interfaces.IAccount.SomeMethod’。 ‘Project.DataAccess.Concrete.Account.SomeMethod’无法实现接口成员,因为它不是公共的 如果我将类和方法公开,它可以正常工作。 但是,如果我改为使用接口名称限定方法名称,那么它也会修复它。 为什么? 例如: namespace Project.DataAccess.Concrete { class Account : Project.DataAccess.Interfaces.IAccount { string IAccount.SomeMethod() { return “Test”; } } } 为什么要修复它? 如果我不这样做,为什么必须公开呢? […]

我担心我添加了太多接口

我正在构建我的域模型并继续重构它。 像我一样,我发现我喜欢接口,因为它允许我根据接口为具体类型创建可重用的方法/控制器/视图。 但是,我发现每次向其中一个域实体添加新属性时都会创建一个接口。 例如,我有一个MemberStatus对象,它inheritance自一个抽象的Entity对象,该对象又实现了IIdentifiableEntity接口,这意味着它具有Id属性。 MemberStatus还实现了INamedEntity接口,这意味着它具有Name属性, IOrderedEntity接口意味着它具有DisplayOrder属性, IHasMembers接口意味着它具有集合成员对象。 这是代码: public class MemberStatus : Entity, INamedEntity, IOrderedEntity, IHasMembers { public string Name { get; set; } public float DisplayOrder { get; set; } public ICollection Members { get; set; } } public abstract class Entity : IIdentifiableEntity { public int Id { get; set; } } public […]

在C#中添加’set’到接口属性

我希望通过为该接口中的属性提供set访问器来“扩展”接口。 界面看起来像这样: interface IUser { string UserName { get; } } 我想要这样的东西: interface IMutableUser : IUser { string UserName { get; set; } } 我需要inheritance权。 我无法将IUser的主体复制到IMutableUser并添加set访问器。 这可能在C#中吗? 如果是这样,怎么办呢?

代表不仅仅是速记界面吗?

假设我们有: interface Foo { bool Func(int x); } class Bar: Foo { bool Func(int x) { return (x>0); } } class Baz: Foo { bool Func(int x) { return (x<0); } } 现在我们可以将Bar和Baz作为Foos折腾并调用他们的Func方法。 代表们对此进行了简化: delegate bool Foo(int x); bool Bar(int x) { return (x0); } 现在我们可以像Foo代表一样折腾Bar和Baz。 除了获得更短的代码之外,代表们的真正好处是什么?

C#:接口中的枚举

我已经看到了几个与此问题类似的线索,但它们都没有真正回答我想问的问题。 对于初学者来说,不幸的是我正在使用现有的API代码,所以很遗憾,虽然可能有更好的方法来做我所要求的事情,但是由于向后兼容性不同,我已经被锁定了。 -negotiable。 我有一个响应类,当前包含一个错误代码和字符串描述的枚举。 错误代码定义了一组相当不错且完整的响应,这些响应都非常语义地耦合到使用它们的操作。 不幸的是,我现在必须为一组类似的API对象添加不同的工作流程,这将需要一个字符串描述,这很好,但也是一个包含一组完全不相关的错误代码的枚举错误代码。 错误代码(以及对象模型的其他方面)将在许多相同的类中使用,因此最好让接口运行,以便我可以通过相同的框架运行对象。 这里的目的是签订一份合同,上面写着“我有一个错误代码,以及该错误代码的描述”。 但是,据我所知,没有办法将项目添加到界面,如 public interface IError { enum ErrorCode; string Description; } 也没有办法表达 public interface IError where T: enum { T ErrorCode; string Description; } 每个人都遇到过这样的事情吗?

C# – 使用扩展方法提供默认接口实现

我刚刚学习了C#扩展方法,并想知道我是否可以使用它来为接口提供默认实现。 说: public interface Animal { string MakeSound(); } public static string MakeSound(this Animal) { return “”; } 然后 public class Dog : Animal { string MakeSound() { return “Bark”; } } public class Porcupine : Animal { } 最后: Animal dog = new Dog(); Animal porcupine = new Porcupine(); Print(dog.MakeSound()); Print(porcupine.MakeSound()); 我希望豪猪和其他没有明确实现MakeSound动物使用返回空字符串的默认扩展方法,但是狗和任何具有显式实现的动物都会返回自己的实现,例如“Bark”。 所以我的问题:1。这可行吗? 2.如果没有,是否有其他方法可以实现接口的默认行为? […]