gab*_*ira 13 .net c# oop interface
我正在查看声明List<T>并看到它实现了IList<T>,ICollection<T>以及IEnumerable<T>(除其他外).
然后我去看看它的定义,IList<T>并看到它实现ICollection<T>和IEnumerable<T>.
如果一个接口实现另一个接口,如果它们像"合同"一样工作并且我们没有编写真正的代码,它有什么意义呢?
这个实施是累积的吗?如果是这样,因为IList<T>工具ICollection<T>和IEnumerable<T>,List<T>不仅要实现IList<T>?
对不起,如果我的问题令人困惑,我现在有点困惑.
Pat*_*sel 19
如果一个接口实现另一个接口,如果它们像"合同"一样工作并且我们没有编写真正的代码,它有什么意义呢?
接口支持继承并以与类相同的方式促进多态性.一个IList<T>也是一个ICollection<T>,就像a TextBox是a一样Control.
这个实施是累积的吗?如果是,因为IList实现ICollection和IEnumerable,List不应该只实现IList?
正如其他人所指出的,这主要是为了可读性和可维护性.是的,继承是累积的.但是,当一个类实现包含具有相同签名的成员的多个接口时,它只需要为所有实现定义一个成员.显式接口实现可用于显式定义给定实现的成员.
至少它减少了冗余.
public interface INamedObject { string Name { get; } }
public interface IValuedObject<T> { T Value { get; } }
public interface INamedValuedObject<T> : INamedObject, IValuedObject<T> { }
Run Code Online (Sandbox Code Playgroud)
设计比以下更好:
public interface INamedObject { string Name { get; } }
public interface IValuedObject<T> { T Value { get; } }
public interface INamedValuedObject<T> {
string Name { get; }
T Value { get; }
}
Run Code Online (Sandbox Code Playgroud)
此外,在后一种情况下,请注意a INamedValuedObject<T>现在既不是INamedObject也不是IValuedObject<T>.
您可以阅读在前一种情况下作为"的东西,是一个INamedValuedObject<T>是这是一个INamedObject,一个IValuedObject<T>,并且还具有以下要素".