我可以留下一个实现接口为空的抽象类,并暗示接口中的所有方法/属性都是我的类中的抽象。看来我必须在抽象类中再次写出来,但我真的想避免这种重复。
我的理由是我有几个带有不同访问器的接口,一个是公共的,一个是内部的,我想把它们放在一起所以我有一个抽象类来实现它们,然后可以扩展它们。
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允许这样)我可以将抽象类留空实现接口吗?
答案 0 :(得分:15)
不。在C#中,抽象类必须完全实现接口。注意可以使用抽象方法和抽象属性来实现它。关于C#的一件小事总是让我烦恼。
答案 1 :(得分:3)
唯一的方法是创建virtual
属性而不实现。然后在派生类中重写它们。
public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties
{
public abstract int PropertyOne { get; }
internal abstract int PropertyTwo { get; }
}