C#接口由空抽象类实现

时间:2011-03-31 03:30:57

标签: c# interface abstract

我可以留下一个实现接口为空的抽象类,并暗示接口中的所有方法/属性都是我的类中的抽象。看来我必须在抽象类中再次写出来,但我真的想避免这种重复。

我的理由是我有几个带有不同访问器的接口,一个是公共的,一个是内部的,我想把它们放在一起所以我有一个抽象类来实现它们,然后可以扩展它们。

public interface ISomePublicProperties {
    int PropertyOne {get;}
}

internal interface ISomeInternalProperties {
    int PropertyTwo {get;}
}

public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties {}

但编译器抱怨SomeClass没有实现接口方法ISomePublicProperties.PropertyOne和ISomeInternalProperties.PropertyTwo

无论如何在C#中(我知道Java允许这样)我可以将抽象类留空实现接口吗?

2 个答案:

答案 0 :(得分:15)

不。在C#中,抽象类必须完全实现接口。注意可以使用抽象方法和抽象属性来实现它。关于C#的一件小事总是让我烦恼。

答案 1 :(得分:3)

唯一的方法是创建virtual属性而不实现。然后在派生类中重写它们。

public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties 
{
    public abstract int PropertyOne { get; }
    internal abstract int PropertyTwo { get; }
}