gpt4 book ai didi

c# - .NET 接口(interface)如何包含数据

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:15 26 4
gpt4 key购买 nike

根据我的理解,接口(interface)只是协议(protocol),没有任何实现。

我正在尝试理解以下代码:

这段代码有效

  Exception ex = new Exception();
ex.Data.Add("1", "One");

因为 DataListDictioaryInternal 类型的属性(如智能所示)),它实现了 IDictionary

但是,如果您右键单击 Data 并转到您看到的定义,它被定义为:

public virtual IDictionary Data { get; }

为什么 Data 没有定义为 ListDictioaryInternal

最佳答案

Exception 类定义了类型为 IDictionary 的属性 Data。这意味着任何实现该接口(interface)的对象都可以由 getter 返回。事实上,如果你深入研究这个定义,你会在评论中看到这个解释:

// Summary:
// Gets a collection of key/value pairs that provide additional user-defined information
// about the exception.
//
// Returns:
// An object that implements the System.Collections.IDictionary interface and contains
// a collection of user-defined key/value pairs. The default is an empty collection.
public virtual IDictionary Data { get; }

看起来类的内部实现使用 System.Collections.ListDictionaryInternal 作为实际使用的对象。如果您查看该类的源代码,您会发现它实现了有问题的接口(interface):

internal class ListDictionaryInternal: IDictionary 
{
//...
}

所以接口(interface)代表了一个对象可以做什么的契约。返回的实际对象是实现接口(interface)的具体类。

关于c# - .NET 接口(interface)如何包含数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52990516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com