0

说我有课

class Object
{
    Vector2 positon;
}

这个位置在属性网格中是可编辑的,我怎么能在从对象继承的类中将它设置为不可浏览/只读。我知道[Browsable(false)]and [ReadOnly(true)]标签,但这将为所有对象设置它,这是我不希望的。

4

2 回答 2

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 是只读属性。您应该谷歌知道是否有可能在运行时更改此属性的实例,我认为不是。

于 2013-01-22T09:43:28.010 回答
1

我认为不可能在运行时更改 browseable 属性(我不明白这样做的意义),但是您可以使用一种方法检查您的条件并允许/禁止写入该属性。如果这足够好,如果你愿意,我很乐意模拟一些东西。

编辑:

class SomeClass
{
    private Object _foo;
    private Object _bar;

    public Object Foo
    {
        get
        {
            return _foo;
        }
        set
        {
            if (_bar != _foo) // replace with your test
            {
                _foo = value;
            }
        }
    }

}
于 2013-01-22T12:46:54.423 回答