首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在接口中定义类实现

在接口中定义类实现
EN

Stack Overflow用户
提问于 2010-10-05 20:58:52
回答 3查看 11.6K关注 0票数 7

你能在一个接口中定义类实现吗?

例如(伪代码警报!)...

代码语言:javascript
复制
interface IClass1
{
    String s { get; set; }

    // classes implementing this interface has to implement Class2 as "SubClass"
    Class2 SubClass;
}

interface IClass2
{
     Int32 i { get; set; }
}

class Class1 : IClass1
{
    String IClass1.s { get; set; }

    class IClass1.Class2 SubClass
    {
        Int32 IClass2.i { get; set; }
    }
}
EN

回答 3

Stack Overflow用户

发布于 2010-10-05 21:08:31

不是的。另外,Class2不是一个子类,它是一个嵌套类或内部类。“子类”(在这个上下文中,还有其他完全不同的上下文)是派生类的另一个名称,在这个名称中,基类被称为“超类”(这就是为什么Java有一个类似于C#中的base的关键字super,虽然有一些不同)。“派生的”和“基础的”是C#中更流行的术语,也许是因为它们在C++中更受欢迎,也许是因为Bjarne Stroustrup说他觉得它们令人困惑,甚至他搞不清哪个是哪个(毕竟,这个子类有一个行为超集,反之亦然)。

内部类本质上将其包含的类用作命名空间,而接口仅详细说明成员方法和属性。

票数 3
EN

Stack Overflow用户

发布于 2014-02-26 17:44:10

如果我误解了,很抱歉,但是,是的,我现在就这样做( .NET 4.0和4.5的VB2013)。接口可以定义属性,属性可以很复杂,其类定义可以嵌套在接口定义中。在实现接口的类中,只能对整个复杂对象使用getter/setter,而不能对其单个属性使用getter/setter。(这些方法的getter/setter当然在类定义中)。工作示例从VB附加,以及未经测试的转换为C#。

VB:

代码语言:javascript
复制
Interface IPrintable
    Property Body As DocBody

    Class DocBody
        Property Text As String
        Property FontSize As Single
    End Class
End Interface

Class WordDoc
    Implements IPrintable
    Public Property WordBody As IPrintable.DocBody Implements IPrintable.Body
End Class

和C#:

代码语言:javascript
复制
interface IPrintable
{
    DocBody Body { get; set; }
    public class DocBody
    {
        public string Text { get; set; }
        public float FontSize { get; set; }
    }
}

class WordDoc : IPrintable
{
    public IPrintable.DocBody WordBody { get; set; }
    IPrintable.DocBody IPrintable.Body {
        get { return WordBody; }
        set { WordBody = value; }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2020-05-23 17:19:28

我无法评论,但这个问题的公认答案不再准确。从C#8开始,可以为接口方法定义默认实现。由于接口没有私有成员,这仅限于调用其他公共成员,因此对于定义相互调用的方法重写非常有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3863817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档