2014-03-14 39 views
0

林不知道是否有可能。我遇到了一個與客戶端API有關的獨特問題。 我需要擴展一個類並添加一個基類中不存在的bool屬性。設置擴展類上的自定義值

下面是我試圖完成的一個例子。

public class baseClass 
{ 
    //.. No Editable Access 
} 

public class Extended 
{ 
    public bool flaggedAsDeleted(this baseClass bc) 
    { 
     //Idealy was looking for get; set; but I know that don't work 
     return true;// Need to know if possible to set property on baseClass or Alternative 
    } 

    public void flagAsDeleted(this baseClass bc) 
    { 
     flaggedAsDeleted = true; 
    } 
} 

public class program 
{ 
    public void doit() 
    { 
     baseClass bc = new baseClass(); 
     bc.flagAsDeleted(); 
    } 

} 

回答

3

如果你想真正擴展一類,你做這樣的:

public class BaseClass 
{ 
    //.. No Editable Access 
} 

public class Extended : BaseClass 
{ 
    public bool FlaggedAsDeleted { get; set; } 
} 

如果你想將數據添加到現有的類,你有兩個選擇:

  1. 繼承 - 如上所示。

  2. 封裝 - 創建一個新對象,該對象包含要添加到的類型的實例。


C#提供了一個叫做Extension Methods功能,它允許你貌似方法添加到現有的類。但是,這些實際上只是語法糖,因爲您仍然受限於該類的公共API。

public class BaseClass 
{ 
    public int Value { get; set; } 
} 

public static class ExtensionMethods 
{ 
    public static void Increment(this BaseClass b) 
    { 
     b.Value += 1; 
    } 
} 

擴展方法不允許您將數據添加到現有類。

+1

感謝您的回覆和快速回復。你提供的信息非常有見地。 –

0

這不是唯一的。這是使用名爲decorator的設計模式解決的常見問題。

相關問題