2013-05-17 118 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