2010-09-23 79 views
2

我有一個基類FooBase。它有幾個標準的讀/寫屬性。當我把這個子類化時,我希望子類只能讀取屬性。這可能嗎?隱藏設置訪問器

class FooBase 
{ 
    public virtual int ID{get; set;} 
    public virtual string Name{get;set;} 
} 

class Foo : FooBase 
{ 
    public override int ID {get;} 
    public override string Name{get;} 
} 

我知道,代碼不工作,但它可能給你一些想法什麼即時通訊後

謝謝!

回答

1

不,你有你的班級扭曲了方向。

可寫版本應該是隻讀版本的子類。這裏是你可以做的一種方式:

class FooBase 
{ 
    public int ID { get; protected set; } 
    public string Name { get; protected set; } 
} 

class Foo : FooBase 
{ 
    public void SetId(int id) { /* ... */ } 
    public void SetString(string name) { /* ... */ } 
} 
+0

謝謝,你能給我一個我如何能做到這一點的例子嗎?即時通訊今天有一個非常金髮的日子... – TerrorAustralis 2010-09-23 06:15:27

2

你不能只刪除一個公共成員那樣,否則會破壞任何東西,試圖把一個Foo的物體,像FooBase對象。

你可以嘗試這樣的事:

public virtual string Name{get; protected set;} 

使得二傳手只適用於從FooBase派生類。