C# 从接口到类继承了属性

C# 从接口到类继承了属性,c#,winforms,interface,C#,Winforms,Interface,我得到一个错误:名称“Foo”在当前上下文中不存在。我做错了什么 注意:限制继承自GeneralRestriction。RestriccionUserControl=RestrictionUserControl 我相信您有一个输入错误,您必须在类中定义Foo的实现,因为接口只是定义属性的契约。此外,必须从接口定义中删除public关键字,因为接口定义的所有方法/属性都是公共的。必须在派生类中实现Foo interface IRestrictionUserControl { public

我得到一个错误:名称“Foo”在当前上下文中不存在。我做错了什么


注意:限制继承自GeneralRestriction。

RestriccionUserControl=RestrictionUserControl


我相信您有一个输入错误,您必须在类中定义Foo的实现,因为接口只是定义属性的契约。此外,必须从接口定义中删除public关键字,因为接口定义的所有方法/属性都是公共的。

必须在派生类中实现Foo

interface IRestrictionUserControl
{
    public GeneralRestriction Foo{ get; protected set; }
}

public partial class RestrictionUserControl : UserControl, IRestrictionUserControl
{
    public RestrictionUserControl(Restriction r)
    {
        InitializeComponent();
        Foo = r;
    }
 }

接口仅包含方法、委托或事件的签名。方法的实现在实现接口的类中完成

还有一点:不能使用访问修饰符定义接口成员。因此,您必须像这样更改接口声明,否则它甚至无法编译

public partial class RestrictionUserControl : UserControl, IRestrictionUserControl
{
    public RestrictionUserControl(GeneralRestriction r)
    {
        InitializeComponent();
        Foo = r;
    }

    public GeneralRestriction Foo
    {
        get; protected set;
    }
}

您只能从类而不是接口继承成员和方法。接口是它将强制实现类拥有的东西的模板

因此,如果接口具有公共成员属性,则需要在类中实现它,就像在方法中一样。

在接口定义中编写GeneralRestriction Foo{get;protected set;}时,它与类定义中的含义不同

如果我记得清楚的话,在一个类中,编译器将从C2.0开始生成getter和setter,但是在接口中,您只是说您的属性必须有一个公共getter和一个受保护的setter


因此,您必须在派生类中实现它们,正如在其他答案中所述,所谓实现,我的意思是只声明一个getter和一个setter,您甚至可以将代码从接口复制粘贴到类中

,但此属性没有任何实现,只是一个值的setter和getter。它不是一个可计算的实现是的,但它必须在类中定义。接口只是一个契约,它在实现过程中创建了特定行为的承诺class@ChrisSinclair他不能在抽象类中这样做,因为他已经从UserControl继承了,即使它可能会sens@ppetrov我看不出他不能创建抽象限制UserControl的技术原因:UserControl?我认为在这种情况下这不是一个好主意,但我不明白为什么不能这样做。@ChrisSinclair我理解你的意思,他可以将他的接口转换成一个抽象类,并保持其他一切不变,这是不可能的。但是在读了你最后的评论之后,我发现我误解了你,当然没有技术上的原因,他不能创建抽象的限制UserControl:UserControl
interface IRestrictionUserControl
{
    public GeneralRestriction Foo{ get; /*protected set;*/ }
}