C# 为什么不能在接口+c中声明变量或字段

C# 为什么不能在接口+c中声明变量或字段,c#,C#,我也知道接口的概念和实现 我知道属性和方法定义可以写在接口上 但在浏览相关主题时,我知道我们不能在接口中声明变量。只是想知道原因 因为变量和字段是实现。接口是声明它们做什么而不是如何做的契约 如果要声明字段,则需要创建一个基类(可能是抽象类) 从使用者的角度来看,接口和抽象基类之间的一个重要区别是,您只能从一个基类派生类,而您的类可以实现任意多的接口。,因为变量和字段是实现的基础。接口是声明它们做什么而不是如何做的契约 如果要声明字段,则需要创建一个基类(可能是抽象类) 从消费者的角度来看,接口

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

我知道属性和方法定义可以写在接口上


但在浏览相关主题时,我知道我们不能在接口中声明变量。只是想知道原因

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

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


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

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

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


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

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

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

接口旨在描述行为,而不是实现。

接口旨在描述行为,而不是实现。

接口的用途是什么?它基本上起着契约的作用。那么,在合同中声明一个预定义的变量格式有什么意义呢?没用。加上它就像一个模板

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

接口的思想是声明类型的某些部分可供外部世界接受,或者相反地不关心实现细节。由于字段应被视为实现细节,因此即使能够声明它们也将是一个矛盾,接口的概念是声明类型中可供外部世界接受的部分,反之则不关心实现细节。由于字段应被视为实现细节,因此即使能够声明它们也会是一个矛盾,因为变量定义了对象中的存储方式。这与接口的概念不兼容

此外,它还会导致多重继承样式的问题,如

interface A { int x; }
interface B { int x; }
class C : A, B
哪一个x实例应该包含在C one och中?在这种情况下,它们之间的区别是什么


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

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

此外,它还会导致多重继承样式的问题,如

interface A { int x; }
interface B { int x; }
class C : A, B
哪一个x实例应该包含在C one och中?在这种情况下,它们之间的区别是什么


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

接口充当契约。因此,它不能包含变量声明。但是,它可能包含将在继承类中实现的属性declation。

接口充当契约。因此,它不能包含变量声明。但是,它可能包含将在继承类中实现的属性declation。

假设它可以定义。因此:

interface Foo
{
     int Number;
     string Text;
}

class Bar : Foo
{
     public int Number;
     public string Text;
}
因此,在实现Foo接口的每个派生类中,您必须创建两个公共成员。至少对我来说,这毫无意义


如果您希望类中的某些成员不是方法,并且希望尽可能地简化它,请查看。

假设可以定义它。因此:

interface Foo
{
     int Number;
     string Text;
}

class Bar : Foo
{
     public int Number;
     public string Text;
}
因此,在实现Foo接口的每个派生类中,您必须创建两个公共成员。至少对我来说,这毫无意义


如果您希望类中的某些成员不是方法,并且希望尽可能简化,请查看。

查看上一篇文章。查看上一篇文章。假设我们可以有一个声明字段的接口,这仅仅意味着实现该接口的任何类都必须提供具有相同名称的相同类型的公共字段
,我不知道该如何在C中包含x的哪个实例?这是相关的。两个接口上的字段x只会引用内存中的相同内容。设想一个C类实现了两个接口a和B,它们都声明了一个void x;。你看到这里有什么问题吗?我认为@Albin提到的多重继承风格问题是指菱形问题,即当你有一个从B类和C类继承的类D,它覆盖了公共父类a中的某个方法。如果你在D的实例中调用该方法,将执行哪些代码?假设我们可以有一个接口声明一个字段,并且这仅仅意味着实现该接口的任何类都必须提供一个具有相同名称的相同类型的公共字段,我不知道应该如何在C中包含x的哪个实例?这是相关的。两个接口上的字段x只会引用内存中的相同内容。设想一个C类实现了两个接口a和B,它们都声明了一个void x;。你看到这里有什么问题吗?我认为@Albin提到的多重继承风格问题指的是菱形问题,也就是说,当你有一个从B类和C类继承的类D,它覆盖了公共父类a中的某个方法。如果你在D的实例中调用该方法,会执行哪些代码?