.net 关于接口的问题
如何才能实施?后者需要实现Add方法,而ReadOnlyCollection不实现这一点。但是,ReadOnlyCollection是具体的,可以实例化 编辑 以下代码将不会在我的计算机上编译:.net 关于接口的问题,.net,.net,如何才能实施?后者需要实现Add方法,而ReadOnlyCollection不实现这一点。但是,ReadOnlyCollection是具体的,可以实例化 编辑 以下代码将不会在我的计算机上编译: static void Main(string[] args) { List<string> people = new List<string>(){ "Sidney", "Jim", "Bob"}; ReadOn
static void Main(string[] args)
{
List<string> people = new List<string>(){
"Sidney",
"Jim",
"Bob"};
ReadOnlyCollection<string> readOnlyPeople = new ReadOnlyCollection<string>(people);
readOnlyPeople.Add("Frank");
}
static void Main(字符串[]args)
{
列出人员=新列表(){
“西德尼”,
“吉姆”,
“鲍勃”};
ReadOnlyCollection readOnlyPeople=新的ReadOnlyCollection(人);
readOnlyPeople.Add(“Frank”);
}
上一条语句中对“Add”的调用现在在Visual Studio 2010中以蓝色下划线。它确实实现了Add方法,但该方法的实现只是抛出一个异常。它确实实现了Add,实现只是抛出一个
NotSupportedException
该实现使用“”,这是一种实现接口的方法,无需在实现类上将接口方法直接公开为公共。当您有一个类实现了多个定义同一成员的接口时,它最有用(请参见链接中的示例)。基本上,它看起来是这样的:
public interface IList<T>
{
int Add(object value);
// and a whole bunch of other stuff...
}
public class ReadOnlyCollection<T> : IList<T>
{
int IList<T>.Add(object value)
{
throw new NotSupportedException();
}
}
另一种实现方法是直接将变量声明为IList
:
IList<string> readOnlyPeople = new ReadOnlyCollection<string>(people);
readOnlyPeople.Add("Frank"); // <-- this should go 'bang!' too
IList readOnlyPeople=new ReadOnlyCollection(人);
readOnlyPeople.Add(“Frank”);//该代码不会编译,因为Add
方法是显式实现的。您必须先强制转换到IList才能访问它。我仍然很困惑。在哪里“明确”实施?我认为接口不支持方法的实现……你是对的,接口本身并不实现方法。显式实现在C#-中是一件特殊的事情。对不起,谢谢Paul。我只是在谷歌上搜索了显式实现和接口。谢谢你的提醒!谢谢你的解释,乔恩。我以为我疯了,否则:)
IList<string> readOnlyPeople = new ReadOnlyCollection<string>(people);
readOnlyPeople.Add("Frank"); // <-- this should go 'bang!' too