说我有一个班级
class Object
{
Vector2 positon;
}
这个位置在属性网格中是可编辑的,我怎样才能将它设置为不能在从对象继承的类中进行可浏览/读取。我知道[Browsable(false)]
和[ReadOnly(true)]
标签,但这会为所有对象设置它,这是我不想要的。
答案 0 :(得分:1)
将位置属性声明为virtual
并在派生类型上覆盖它。
public class Class1
{
public virtual string Lol { get; set; }
}
class Class1Impl1 : Class1
{
[Browsable(false)]
[ReadOnly(false)]
public override string Lol
{
get
{
return base.Lol;
}
set
{
base.Lol = value;
}
}
}
class Class1Impl2 : Class1
{
[Browsable(true)]
[ReadOnly(true)]
public override string Lol
{
get
{
return base.Lol;
}
set
{
base.Lol = value;
}
}
}
在运行时执行它是一个不同的问题,IsBrowsable和IsReadOnly是只读属性。您应该谷歌知道是否有可能在运行时更改此属性的实例,which I think is not.
答案 1 :(得分:1)
我不认为可以在运行时更改可浏览属性(我不明白这样做的意义),但您可以使用方法检查您的条件并允许/禁止写入属性。如果那还不错,如果你愿意,我会很高兴嘲笑。
编辑:
class SomeClass
{
private Object _foo;
private Object _bar;
public Object Foo
{
get
{
return _foo;
}
set
{
if (_bar != _foo) // replace with your test
{
_foo = value;
}
}
}
}