Closed 2881099 closed 9 months ago
你是说下面使用TransactionalAttribute
时的属性提示吗,像下面这样的。
这个确实使用体验上会受到影响,肉夹馍的部分功能在使用时并不需要,不过设置为protected
无法重写直接改变访问级别,需要使用其他属性进行暴露,这会影响到肉夹馍在编译时的属性取值,肉夹馍是通过属性名称来取值的。
我有另一个解决方案,可以使用new
关键字覆盖MoAttribute
的属性,然后修改setter
的可访问性,getter
还是需要保持public
的:
public class TransactionalAttribute : Rougamo.MoAttribute
{
public new AccessFlags Flags { get => base.Flags; private set => base.Flags = value; }
}
可以尝试下这种方式是否能满足需求
抱歉,之前应该是我测试的方式不对,通过new的这种方式无法屏蔽已经开放的属性,同样还是存在提示,只是在使用的时候会提示可访问性不足
现在默认将MoAttribute
的所有属性的setter都改为private的了,如果需要公开某个属性的setter,同样使用new
关键字进行覆盖
public class TestAttribute : MoAttribute
{
// 通过new关键字覆盖了MoAttribute的Order属性,同时将setter设置为public
// virtual关键字是可选的,如果你确定没有类型会继承自TestAttribute并重写Order属性,那么可以去掉virtual
// 这里为Order设置了一个默认值,当然也可以不设置
public new virtual double Order { get; set; } = 10;
}
该修改将在2.2版本中上线,近日将发布2.2正式版,目前已经可以通过preview版本进行测试了。
在最终使用的时候,优先展示了 MoAttribute 的内部属性。
建议设置成 protected,使用者继承后自已选择是否开放,例如: