在类中便用常量
我们经常需要在类中使用常量成员,这种成员的值在执行期间不能改变。有下面两种常量。
1:类的每个对象都不变的常量。例如,car类可包含一个numberOfwheels成员,它的值对于card的所有实例来说都是4。这称为“类级常量”。
2:不同对象会发生变化的常量。例如,BankAccount对象包含一个账号,它对于不同实例来说是不同的,但一经设置就不能变动。这称为“实例常量”。
1:使用类级常量
类级常量代表在类的所有实例中都不变的值。拿我们的CreditAccount例子来说,假定信用卡有一个品牌名称,比如“Super Platinum Card”(超级白金卡),该名称适合同类型的所有卡片,所以它逻辑上从属于类而不是实例。进一步假定信用卡名称不会发生改变,所以适合把它设为类级常量。
用literal关键字创建类级常量,如下所示:
ref class MyClass{
public:
literal String^ name="demo1";
}
每个literal都必须有一个初始值,而且必须是编译时能计算的值。换言之,它不能依赖于运行时才能确定的东西。
由于name是常量,所以可以放心地设为公共,因为任何人都修改不了它。可声明内建类型、ref 类型和值类型的literal。
注意:标准C++允许使用static const成员表示类级常量。虽然C++/CLI也支持这样写,但如果类是通过一个#using语句来访问的,这种常量就不被认为是编译时常量。所以,推荐尽量使用literal,这种成员的行为保证是符合预期的。
2:使用实例常量
用initonly关键字将数据成员标记为实例常量。这种数据成员的值在创建实例时由构造器设置,之后不能修改。
ref class MyClass{
public:
initonly long accountNumber;
}