.net 关于接口的问题

.net 关于接口的问题,.net,.net,如何才能实施?后者需要实现Add方法,而ReadOnlyCollection不实现这一点。但是,ReadOnlyCollection是具体的,可以实例化 编辑 以下代码将不会在我的计算机上编译: static void Main(string[] args) { List<string> people = new List<string>(){ "Sidney", "Jim", "Bob"}; ReadOn

如何才能实施?后者需要实现Add方法,而ReadOnlyCollection不实现这一点。但是,ReadOnlyCollection是具体的,可以实例化

编辑

以下代码将不会在我的计算机上编译:

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