重写属性

时间:2011-05-23 07:59:31

标签: c# inheritance

我从具有此属性的类继承:

public bool isAuthorized
{
    get { return _Authorized; }
    set { _Authorized = value; }
}

我试图在派生类中覆盖它,但它无法识别isAuthorized。有人可以用我的语法帮助我吗?

public override bool isAuthorized()
{

}

这是我得到的错误:

cannot override because 'CDBase.isAuthorized' is not a function

编辑:所以如果我希望覆盖始终将isAuthorized设置为true,我会使用这种语法吗?

private bool _Authorized = false;

    public override bool isAuthorized 
    {
        get { return _Authorized; }
        set { _Authorized = true; }
    }

10 个答案:

答案 0 :(得分:4)

它是一个属性,您用作方法isAuthorized()

() - 用于方法

你必须在你的派生类

中做
public override bool isAuthorized
    {

    }

答案 1 :(得分:2)

与您希望方法可以覆盖的情况相同时,该属性也必须在基类中声明为虚拟

public virtual bool isAuthorized ...

此外,您无法使用方法覆盖propeprty。您只能覆盖派生类中的getter和setter:

public override bool isAuthorized
{
   get { return base.isAuthorized; }
   set { base.isAuthorized = value; } 
}

答案 2 :(得分:2)

原始类应该有一个虚拟,但我怀疑你可能也有一个问题,即你试图用派生类方法覆盖基类属性。

如果派生类方法如下所示:

    public override bool isAuthorized
    {
        get { return _Authorized; }
        set { _Authorized = value; }
    }

然后你需要在基类中使用它:

    public virtual bool isAuthorized
    {
        get { return _Authorized; }
        set { _Authorized = value; }
    }

你能否更多地去实现你想要实现的目标?

答案 3 :(得分:2)

要将值始终设置为true,您只需编写以下代码:

  public override bool isAuthorized
  {
      get { return true; }
  }

答案 4 :(得分:0)

public virtual bool isAuthorized
{
    get { return _Authorized; }
    set { _Authorized = value; }
}



public override bool isAuthorized
{
 ...
}

答案 5 :(得分:0)

在基类中,将要覆盖的属性标记为virtual,并在派生类中使用override关键字作为需要覆盖的属性。

答案 6 :(得分:0)

   class A
    {
        public virtual string prop { get; set; }
    }

    class B : A
    {
        public override string prop
        {
            get
            {
                return "overridden";
            }
            set
            {
                base.prop = value;
            }
        }
    }

答案 7 :(得分:0)

您好我认为您必须将此声明为能够覆盖的虚拟

像:

public virtual bool isAuthorized
 {
      得到{return _Authorized; }
      设置{_Authorized = value; }
 }

Regars,

答案 8 :(得分:0)

在基类中,您可以将其标记为虚拟,并且可以覆盖。 实际上,使用反射器我们也可以看到属性也是方法!

答案 9 :(得分:0)

关于您的错误和语法: 只是不要使用'()'。您正在使用属性作为方法。

关于如何做到:

在基类中实现它有两种方法。 '新'和'覆盖'。但是它们的实现因基类而异。

http://msdn2.microsoft.com/en-us/library/435f1dw2.aspx

new修饰符指示编译器使用您的实现而不是基类实现。任何不引用您的类但基类的代码都将使用基类实现。

public bool isAuthorized
 {
     get { return _Authorized; }
     set { _Authorized = value; }
 }


public new bool isAuthorized
 {  //someth    }

http://msdn2.microsoft.com/en-us/library/ebca9ah3.aspx

override修饰符可用于虚方法,必须用于抽象方法。这表明编译器使用方法的最后定义的实现。即使在对基类的引用上调用该方法,它也会使用覆盖它的实现。

public virtual bool isAuthorized
 {
     get { return _Authorized; }
     set { _Authorized = value; }
 }


public override bool isAuthorized
 {  //someth    }