能否在同一属性上使用公共的初始化访问器和私有的设置器?
目前我遇到了错误CS1007:“属性访问器已经定义”。
public record Stuff
{
public int MyProperty { get; init; private set; } // Error
public void SetMyProperty(int value) => MyProperty = value;
}
var stuff = new Stuff
{
MyProperty = 3, // Using the init accessor
};
stuff.SetMyProperty(4); // Using the private setter (indirectly)
我最好的猜测是使用一个私有成员变量,为该变量创建一个特性,其中包括get
和init
访问器(不是自动实现的),以及设置成员函数。是否可以更轻松地完成这个任务?
init
也是一个setter。 - Panagiotis Kanavosinit
访问器使用与set
访问器相同的set_MyProperty
设置方法:只是用modreq
进行了修饰。 - canton7init
的整个概念是使属性不可变。拥有一个 setter 方法会破坏这个目的。 - Jerrywith
,但这并不能使任何逻辑(例如一致性检查)成为可能。 - Gábor Imre