接口变量具有值类型还是引用类型语义?
接口由类型实现,而这些类型既可以是值类型也可以是引用类型。显然,int
和 string
都实现了 IComparable
接口,其中 int
是值类型,string
是引用类型。但对于下面的情况呢:
IComparable x = 42;
IComparable y = "Hello, World!";
(我试图回答的问题可能已经被删除,因为它问接口是存储在堆栈还是堆上,而我们都应该知道,更有建设性的方法是从语义的角度考虑值类型和引用类型之间的差异,而不是它们的实现。关于此讨论,请参见Eric Lippert的The stack is an implementation detail。)