2010-09-28 122 views
4

我有一個私有類用於實現某些屬性。因此,我無法修改實際的私有類,也不想使用繼承來創建自己的類來代替它。有沒有一種方法可以將屬性添加到該私有類中?將屬性添加到現有類

謝謝!

回答

9

如果您可以訪問您需要的類中的數據,並且可以使用方法而不是屬性,請查看在C#3.0中引入的extension methods。從這篇文章中,這裏的加入到(密封的,不可修改)String類的擴展方法:

public static class MyExtensions 
{ 
    public static int WordCount(this String str) 
    { 
     return str.Split(new char[] { ' ', '.', '?' }, 
         StringSplitOptions.RemoveEmptyEntries).Length; 
    } 
} 

the horse's mouth,擴展性質是在C#未來版本的可能性。

如果您需要訪問私人字段或方法,這不會對您有所幫助。在這種情況下,你可能會考慮反思,但我建議不要這樣做,除非它真的有必要 - 有時候它可能會變得混亂。

+0

嚴格地說,C#3.0(不是.NET 3.0),因爲如果你只是定義屬性,你可以使用擴展方法來對*任何*版本的.NET。 – 2010-09-28 07:36:24

+0

@Marc:d'oh!編輯,謝謝。 – 2010-09-28 07:50:25

1

如果屬性的目的是爲了數據綁定,那麼您可以在控制使用TypeDescriptionProvider,這是一個ICustomTypeDescriptor工廠外面添加運行屬性類型。然後,您會鏈接原始提供商並創建一個自定義PropertyDescriptor,獲取附加數據。

這對於基於現有屬性(以及「相當容易」我的意思是「僅略微瘋狂」)計算的只讀額外屬性是相當容易的,但對於讀寫屬性(或屬性是獨立於現有成員)這是非常困難的,因爲你需要弄清楚在哪裏把這些值(仍然得到垃圾收集等)。不平凡的。