gpt4 book ai didi

c# - 只读字段作为子类构造函数的目标

转载 作者:IT王子 更新时间:2023-10-29 04:43:42 24 4
gpt4 key购买 nike

当您有一个在对象实例化时已知且之后不应更改的变量时,应使用只读字段。

但是不允许从子类的构造函数中分配只读字段。如果父类(super class)是抽象的,这甚至不起作用。

有没有人能很好地解释为什么这不是一个好主意,或者 C# 语言中缺少什么?

abstract class Super
{
protected readonly int Field;
}

class Sub : Super
{
public Sub()
{
this.Field = 5; //Not compileable
}
}

PS:您当然可以通过在父类(super class)的 protected 构造函数中分配只读字段来达到相同的结果。

最佳答案

根据 spec,我能看到的唯一原因是因为“它就是那样设计的” :

Direct assignments to readonly fields can only occur as part of that declaration or in an instance constructor or static constructor in the same class.

只读的一点是它不能被改变,如果派生类可以修改那么这将不再是真的并且将违反封装(通过修改另一个类的内部)。

关于c# - 只读字段作为子类构造函数的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7706426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com