我正在使用“奇怪值”来区分选项列表的第三方控件。他们使用两种不同的属性来唯一标识每个选项。使用静态只读与静态获取器模仿常量
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#编译器处理这些不同?是否有性能优势等 –
一个是静态的,另一个不是。一个是财产,另一个是领域。显然,这些将会有所不同 - 决定你感兴趣的差异取决于你。如果你的意思是*所有*差异,那么最好的做法是阅读文档,看看静态效应是什么'和一个领域和财产如何不同。一旦你制定了更具体的问题,我们可以回答,而不是 –