我知道它的接口和实现的概念
我知道属性和方法定义可以写成接口。
但是在浏览相关主题时我才知道我们无法在界面中声明变量。只是想知道它的原因吗?
答案 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
。