一個更通用,更安全,可重複使用的解決方案,您的問題可能是實現一個通用的,「參數」屬性類,如下:
// Generic, parameterized (indexed) "property" template
public class Property<T>
{
// The internal property value
private T PropVal = default(T);
// The indexed property get/set accessor
// (Property<T>[index] = newvalue; value = Property<T>[index];)
public T this[object key]
{
get { return PropVal; } // Get the value
set { PropVal = value; } // Set the value
}
}
然後,您可以內實現任意數量的屬性您公共類,這樣客戶端可以設置/獲取與索引,描述符,安全密鑰,或什麼的,像這樣的屬性:
public class ParameterizedProperties
{
// Parameterized properties
private Property<int> m_IntProp = new Property<int>();
private Property<string> m_StringProp = new Property<string>();
// Parameterized int property accessor for client access
// (ex: ParameterizedProperties.PublicIntProp[index])
public Property<int> PublicIntProp
{
get { return m_IntProp; }
}
// Parameterized string property accessor
// (ex: ParameterizedProperties.PublicStringProp[index])
public Property<string> PublicStringProp
{
get { return m_StringProp; }
}
}
最後,客戶端代碼將訪問你這樣的公共類的「參數」屬性:
ParameterizedProperties parmProperties = new ParameterizedProperties();
parmProperties.PublicIntProp[1] = 100;
parmProperties.PublicStringProp[1] = "whatever";
int ival = parmProperties.PublicIntProp[1];
string strVal = parmProperties.PublicStringProp[1];
當然,這看起來很奇怪,但它絕對有訣竅。此外,從客戶端代碼的角度來看,這並不奇怪 - 它簡單直觀,並且像真正的屬性一樣行事。它不會破壞任何C#規則,也不會與其他.NET託管語言不兼容。從類實現者的角度來看,創建一個可重用的通用「參數化」屬性模板類使組件編碼變得相對輕而易舉,如此處所示。
注意:您始終可以覆蓋通用屬性類以提供自定義處理,如索引查找,安全控制的屬性訪問或任何你想要的。
乾杯!
馬克瓊斯
好的答案男人。不知道你爲什麼建議使用「」而不是String.Empty,儘管......原來對我來說似乎更加明確。 – Stimul8d 2009-09-04 09:20:10
@ Stimul8d:我不關注。 ``「`不明確?我在兩者之間看到的唯一區別(也就是說,恕我直言,一個程序員*應該看到)是`String.Empty`是六倍的長度,因此它需要六倍的空間並且需要六倍的時間來閱讀。它使代碼變壞了六倍。作爲比較,就好像我們將使用`Int32.Zero`而不是`0`。 – 2009-09-04 09:54:04
鼻子獨角獸:我上星期只是用同樣的說法! – 2010-04-06 13:35:43