为什么不能在interface + c#中声明变量或字段?

时间:2011-08-12 06:09:26

标签: c#

我知道它的接口和实现的概念

我知道属性和方法定义可以写成接口。

但是在浏览相关主题时我才知道我们无法在界面中声明变量。只是想知道它的原因吗?

8 个答案:

答案 0 :(得分:4)

因为变量和字段是实现。接口是声明他们做什么的合同,而不是他们如何做的合同。

如果要声明字段,则需要创建一个基类(可能是抽象)类。

从消费者的角度来看,接口和抽象基类之间的一个重要区别是,您可以从一个基类派生您的类,而您的类可以实现任意数量的接口。

答案 1 :(得分:1)

接口用于描述行为,而不是实现。

答案 2 :(得分:1)

因为变量定义了对象内部的存储方式。这与界面的想法不兼容。

此外,它会导致多继承风格的问题,如

interface A { int x; }
interface B { int x; }
class C : A, B

C中应包含x的哪个实例(两个都是一个,在这种情况下你如何区别?)

您应该在界面中使用属性,因为可以在不指定实现的情况下定义该属性。这有着相同的目的,但有更好的封装。

答案 3 :(得分:1)

让我们说它可以定义。所以:

interface Foo
{
     int Number;
     string Text;
}

class Bar : Foo
{
     public int Number;
     public string Text;
}

因此,在每个派生类(实现Foo接口的类)中,您必须创建两个公共成员。至少在我看来,没有任何意义。

如果您希望您的类有一些非方法的成员,并且您希望尽可能简化它,请查看Auto-Implemented Properties

答案 4 :(得分:0)

超越“因为这是规范”我不确定,一个原因可能是在我看来,接口中的所有允许可以直接绑定到一个方法(属性映射一个或两种方法)。

答案 5 :(得分:0)

什么是接口的使用?它基本上是合同。那么在合同中声明一个变量的预定义格式是什么意思呢?没用加上它就像一个模板。

答案 6 :(得分:0)

接口的想法是声明一种类型的部分可以被外部世界认可,或者反过来不关心实现细节。由于字段应被视为实现细节,即使能够声明它们也是矛盾的

答案 7 :(得分:0)

接口充当contract。因此,它不能包含variable declaration。但是,它可能包含Properties declation,您将在inherited class

中实现