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

本文关键字:变量 字段 不能 声明 为什么 | 更新日期: 2023-09-27 18:05:13

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

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

但是通过相关的主题,我知道我们不能在接口中声明变量。只是想知道原因吗?

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

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

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

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

假设它可以被定义。所以:

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

因此,在每个派生类(实现Foo接口的类)中,必须创建两个公共成员。那,至少对我来说,毫无意义。

如果你想让你的类有一些不是方法的成员,并且你想尽可能地简化它,看看自动实现属性。

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

因为变量定义了对象内部的存储方式。这与接口的概念不兼容。

除此之外,它还会导致多重继承类型的问题,如

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

哪个x的实例应该包含在C中(一个或两个,在这种情况下你如何区分它们?)

你应该在接口中使用属性,因为它可以在不指定实现的情况下定义。

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

界面有什么用?它基本上起到了合同的作用。那么,在合约中声明变量的预定义格式有什么意义呢?没有使用。而且它就像一个模板。

接口的思想是声明对外部世界可访问的类型部分,或者反过来不关心实现细节。由于字段应该被视为实现细节,因此即使能够声明它们

也会产生矛盾。

接口作为contract。所以,它不能容纳variable declaration。但是,它可能包含Properties声明,您将在inherited class中实现。