C# 实现接口
我对接口的实现感到困惑 根据C# 实现接口,c#,.net,inheritance,interface,C#,.net,Inheritance,Interface,我对接口的实现感到困惑 根据ICollection具有属性IsReadOnly -及- 根据收集实现i收集 -所以- 我以为Collection将具有IsReadOnly属性 -然而- Collection<string> testCollection = new Collection<string>(); Console.WriteLine(testCollection.IsReadOnly); Collection testCollection=new Collec
ICollection
具有属性IsReadOnly
-及-
根据收集
实现i收集
-所以-
我以为Collection
将具有IsReadOnly
属性
-然而-
Collection<string> testCollection = new Collection<string>();
Console.WriteLine(testCollection.IsReadOnly);
Collection testCollection=new Collection();
Console.WriteLine(testCollection.IsReadOnly);
上面的代码给出了编译器错误:
“System.Collections.ObjectModel.Collection”不包含“IsReadOnly”的定义,并且没有接受类型为的第一个参数的扩展方法“IsReadOnly”
可以找到“System.Collections.ObjectModel.Collection”(您是否缺少using指令或程序集引用?
-当-
Collection<string> testInterface = new Collection<string>();
Console.WriteLine(((ICollection<string>)testInterface).IsReadOnly);
Collection testInterface=new Collection();
Console.WriteLine(((ICollection)testInterface.IsReadOnly);
上述代码有效
-问题:-
我认为实现接口的类必须实现每个属性,所以为什么
testCollection
没有IsReadOnly
属性,除非您将其转换为ICollection
?它可能显式地实现了该属性
C#使您能够将方法定义为“显式实现的接口方法/属性”,仅当您有确切接口的引用时才可见。这使您能够提供一个“更干净”的API,而不会产生太多噪音。接口可以通过两种方式实现。显式和隐式 显式实现:当成员显式实现时,不能通过类实例访问它,只能通过接口实例访问它 隐式实现:可以通过接口方法和属性访问这些方法和属性,就像它们是类的一部分一样
IsReadonly
属性是显式实现的,因此它不能通过类直接访问。看一看
例如:
public interface ITest
{
void SomeMethod();
void SomeMethod2();
}
public ITest : ITest
{
void ITest.SomeMethod() {} //explicit implentation
public void SomeMethod2(){} //implicity implementation
}
请参阅以获得更好的解释谢谢提供信息。在搜索了这个之后,我在@jemartin80上找到了一个非常详尽的解释,很高兴它有所帮助。我想找出Eric Lippert对此的详细描述。但是我找不到它。