我正在使用「奇怪值」來區分選項列表的第三方控件。他們使用兩種不同的屬性來唯一標識每個選項。使用靜態只讀與靜態獲取器模仿常量
Example:
"Field" + "RW" = "CheckedOutBy"
"System" + "N" = "Name"
"Field + "N" = "Notifier"
總共有37個不同的選擇(每個組合這兩個值組成37個獨特選項)。
我已經創建了一個存儲這兩個值的結構,並且我將爲每個選項創建一個新的結構實例。
public struct ColumnCode : IEquatable<ColumnCode>
{
public static readonly ColumnCode Empty = new ColumnCode();
private readonly ColumnType _columnType;
private readonly string _code;
internal ColumnCode(ColumnType columnType, string code)
{
_columnType = columnType;
_code = code;
}
public override string ToString() { ... }
public bool Equals(ColumnCode other) { ... }
public override int GetHashCode() { ... }
}
理想我想創建爲每個選項的「常數」,但由於常量不是我想嘗試和模仿恆定的選項。
我提出的兩種方法是使用靜態只讀字段或靜態屬性只有一個getter。
public static class FieldOption
{
public static ColumnCode CheckedOutBy { get; } = new ColumnCode(ColumnType.Field, "XW");
public static ColumnCode Name { get; } = new ColumnCode(ColumnType.System, "N");
public static ColumnCode Notifier { get; } = new ColumnCode(ColumnType.Field, "N");
}
或
public static class FieldOption
{
public static readonly ColumnCode CheckedOutBy = new ColumnCode(ColumnType.Field, "XW");
public static readonly ColumnCode Name= new ColumnCode(ColumnType.System, "N");
public static readonly ColumnCode Notifier = new ColumnCode(ColumnType.Field, "N");
}
在任何情況下,現在可以參考我在我的C#代碼的選擇使用FieldOption.CheckedOutBy
,FieldOption.Name
或FieldOption.Notifier
等,但我不知道,如果一個方法是優於其他。
其中一個選擇比另一個更好地模仿const
,還是有更好的方法,我不考慮。
我已經閱讀了大量的互聯網信息,我仍然沒有提出一個很好的答案。它似乎有些衝突。許多信息狀態偏好屬性而不是字段,但在本文中(https://msdn.microsoft.com/en-us/library/ms229057(v=vs.110).aspx)Microsoft說「DO使用公共靜態只讀字段用於預定義的對象實例」,所以我覺得靜態只讀字段是正確的選擇。
我也不確定這裏的反射如何影響比賽。我想確保FieldOptions的值不能改變,即使通過反射。
任何幫助,將不勝感激。
你知道關鍵字的作用嗎? –
@Jeroen Vannevel不知道我理解你的問題?我只是想知道如果C#編譯器處理這些不同?是否有性能優勢等 –
一個是靜態的,另一個不是。一個是財產,另一個是領域。顯然,這些將會有所不同 - 決定你感興趣的差異取決於你。如果你的意思是*所有*差異,那麼最好的做法是閱讀文檔,看看靜態效應是什麼'和一個領域和財產如何不同。一旦你制定了更具體的問題,我們可以回答,而不是 –