只是好奇,有没有办法让恒定变量的吸气剂?我有一种内部版本号,以确保两个版本的库仍然使用相同的语言,但我希望程序员能够检查他们正在使用的版本.现在我使用:
private const Int16 protocol_version = 1;
public Int16 ProtocolVersion { get { return protocol_version; } }
Run Code Online (Sandbox Code Playgroud)
但如果有办法,我宁愿只用const来做.
Pao*_*sco 10
你可以声明一个只有一个get访问器的属性(甚至没有声明set访问器,甚至不是私有的):
private const Int16 protocol_version = 1;
public Int16 ProtocolVersion {
get { return protocol_version; }
}
Run Code Online (Sandbox Code Playgroud)
这与仅定义常量不同:常量将在编译时解析,因此如果更新库而不重新编译依赖程序,程序仍将看到"旧"值.考虑这个例子:
// The class library
using System;
namespace MyClassLibrary {
public class X {
public const Int16 protocol_version = 1;
public Int16 ProtocolVersion { get { return protocol_version; } }
}
}
// The program
using System;
using MyClassLibrary;
class Program {
static void Main(string[] args) {
X x = new X();
Console.WriteLine("Constant : {0}", X.protocol_version);
Console.WriteLine("Getter: {0}", x.ProtocolVersion);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,第一次编译并执行程序.你会看见
Constant : 1
Getter : 1
Run Code Online (Sandbox Code Playgroud)
然后,将protocol_version修改为2,并仅重新编译类库,而不重新编译程序,然后将新类库放在程序文件夹中并执行它.你会看见:
Constant : 1
Getter : 2
Run Code Online (Sandbox Code Playgroud)
事实是,如果它只是一个常量,则在编译时替换该值.
我认为您实际需要的是一个static readonly变量:这样,您将避免编译时const替换,并且该变量在初始化后将无法修改:
public static readonly Int16 protocol_version = 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8915 次 |
| 最近记录: |