这是结构的良好候选者吗?
考虑这个不可变结构示例,其中构造函数验证输入并将验证数据存储为单个“路由代码”:
struct RoutingCode
{
private readonly string routingCode;
RoutingCode(string prefix, string service, string sender)
{
// Validate prefix, service, sender strings
// ...
if (isInvalid) throw ArgumentException();
//
this.routingCode = prefix + service + sender;
}
// Gets the validated routing code.
public string Routing
{
return this.routingCode;
}
public int RoutingLength
{
return this.routingCode.Length;
}
}
在我看来,这个简化的示例是使用 astruct
而不是a 的好选择class
:
- 它是不可变的。
- 它代表一个奇异值。
- 实例大小很小。
问题是所有结构都有一个隐式的默认构造函数。在这个例子中,默认构造函数RoutingCode()
将实例化一个Routing
属性返回的对象null
——这是一个无效的路由代码。Point
这与其他结构不同,例如BigInteger
支持字段包含默认实例的非常合乎逻辑且有效的“零”。
除了不确保有效的路由代码之外,该RoutingLength
属性还会在默认实例上引发NullReferenceException
if 调用。
保持 this astruct
与使其成为 a的论据是class
什么?