2013-05-17 114 views
1

我有一个基类抽象类BasePerson。我有另一个抽象类BaseStudent,这从BasePerson继承。这里是例子。重写抽象类的抽象成员

public abstract class BasePerson 
{ 
    public string Name{get;set;} 
    public string LastName{get;set;} 
    public abstract object this[string propertyName]{get;set;} 
} 

public abstract class BaseStudent : BasePerson 
{ 
    public string Test{get;set;} 
    //this class inherits from BasePerson and it forces to override the indexer. 
    //I can do this: 
    public override object this[string propertyName] 
    { 
     get{return null;} 
     set 
     { 
      //do stuff; 
     } 
    } 
} 

public class Student : StudentBase 
{ 
    //other properties 
} 

现在我无法强迫Student类重写索引。我该如何强制学生重写索引器?我无法从BasePerson类删除索引器。

帮助感谢!

+0

如果你想从'BaseStudent'从'BasePerson'继承'BaseStudent'时删除索引器,那么你的类层次结构就会出现问题。你为什么想这样做? – JeffRSon

+2

如果你想强制它,不要在'BaseStudent'上实现它。由于'BaseStudent'是'abstract',因此它不需要执行'BasePerson'中的所有'abstract'成员。 –

+0

@JeffRSon对不起我的英文。也许我无法解释它好。我不打算删除索引器。我在BasePerson中需要它。 – Dilshod

回答

3

如果你想要强迫它,不要在BaseStudent上实现它。由于BaseStudentabstract,因此不需要需要来实现BasePerson中的所有abstract成员。

public abstract class BasePerson 
{ 
    public string Name{get;set;} 
    public string LastName{get;set;} 
    public abstract object this[string propertyName]{get;set;} 
} 

public abstract class BaseStudent : BasePerson 
{ 
    public string Test{get;set;} 
} 

public class Student : BaseStudent 
{ 
    //must implement it here since Student isn't abstract! 
} 

abstract类不需要定义所有他们继承类的abstract成员,因此,您可以随意放过责任到任何具体的类会实现它。 Student没有被定义为abstract,所以它必须实施任何成员尚未被它所继承的基类链实现。

+0

我正要写同样的东西,+1 – ken2k

+0

我不知道我可以这样做。非常感谢! – Dilshod