我有一个包装类,它封装了一段需要作为字节数组传输的信息。
通过这种方式,该类将必要的头(包括DATA_LENGTH或MESSAGE_TYPE等字段)封装到相应的字节位置。为此,我想在常量中定义位置和长度,例如:
HEADER_DATA_LENGTH_IX = 0;
HEADER_DATA_LENGTH_LENGTH = 2;
表示DATA_LENGTH从0开始,占用两个字节。
但到目前为止,我正在努力使它们成为常量或静态只读字段。 Const无法保护,因此如果使用它,我将无法派生新类并更改常量,另一方面,我可能在派生类中声明新常量并使用它们。
你的方法是什么?
答案 0 :(得分:4)
答案 1 :(得分:4)
基本区别在于初始化变量。 'readonly'在初始化时或在构造函数中设置,而'const'在编译时设置。
我认为最重要的决定是你是否要继承该类并覆盖该值。如果你这样做,请继续阅读。否则我认为这不重要。
readonly C#ref:http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx
const C#ref:http://msdn.microsoft.com/en-us/library/e6w8fe1b.aspx
答案 2 :(得分:2)
答案 3 :(得分:0)
我不会让这些不变,因为它们不是常量。当宣布某事为const时,你应该问自己:这可以改变吗?您的消息长度可能会在某一天发生变化,因此最好只读取它们。
答案 4 :(得分:0)
使用常量创建内部类。然后,派生类可以覆盖内部类,并根据需要更改常量。
e.g。基类:
public class Stuff
{
public class HeaderInformation
{
public const int HEADER_DATA_LENGTH_IX = 0;
public const int HEADER_DATA_LENGTH_LENGTH = 2;
}
}
然后派生类可以这样做:
public class DerivedStuff : Stuff
{
public new class HeaderInformation : Stuff.HeaderInformation
{
public new const int HEADER_DATA_LENGTH_IX = 10;
}
}
这样,你就具有灵活性。在DerivedStuff
中,HeaderInformation类包含基类Stuff.HeaderInformation
类中的所有常量,但可以更改其中的任何常量,或保留它们中的常量。