【发布时间】:2016-03-14 17:39:27
【问题描述】:
我刚刚了解到,在 C# 中,您可以在技术上将数据存储在接口中。请参阅以下示例。使用此示例接口和类:
public interface IInterface
{
int id { get; set; }
}
public class ExampleClass : IInterface
{
public int id { get; set; }
}
还有示例程序。
class Program
{
static void Main(string[] args)
{
var newExample = new exampleClass();
newExample.id = 5;
IInterface exInterface = newExample;
Console.WriteLine(exInterface.id);
Console.ReadLine();
}
}
我会得到 5 的输出。为什么?我认为接口除了结构之外没有存储任何东西。这种间接存储和引用是否有技术术语?因为这个功能有点隐藏,这不是也有点糟糕吗?我通常不会想到引用接口上的属性来检索实际数据,这就是对象的用途。
如果格式错误或我需要清除任何内容,请告诉我。谢谢!
【问题讨论】:
-
这个值是在类中存储的,但是你可以通过接口访问它,如果你有两个类实现你的接口,这将是有用的
-
您的两个变量都引用了相同的内存。为什么你会期望同一个内存包含两个不同的值?赋值不会复制任何内容,您只需将两个引用设置为同一个对象实例。
-
基本上你所做的只是将
ExampleClass转换为它的界面。您检索的值仍然来自objectnewExample。该接口提供了一个必须由类提供的契约,因此我们知道如果我们有一个IInterface,它必须提供一个属性id,它返回一个int。没有隐藏的功能,你只是调用object实现的类接口。