2011-05-23 128 views
0

我從擁有該物業的類繼承:壓倒一切的性質

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

我想在派生類中重寫這一點,但它不承認isAuthorized。有人可以用我的語法來幫助我嗎?

public override bool isAuthorized() 
{ 

} 

這是錯誤我得到:

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

編輯:所以,如果我想在覆蓋時總是設置isAuthorized爲真,我會用這個語法?

private bool _Authorized = false; 

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

回答

2

要始終設置你的價值爲true,你可以簡單地編寫代碼:

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

同樣,當你想你的方法是重寫的,屬性也將被聲明在基類虛擬

public virtual bool isAuthorized ... 

你也不能覆蓋使用的方法的propeprty。您只能覆蓋在派生類中的getter和setter方法:

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

原班應該有一個虛擬的,但我懷疑你可能也有一個問題的事實是,你正試圖重寫基類屬性用派生類方法。

如果你的派生類的方法是這樣的:

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

那麼你就需要這你的基類:

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

你能也許desrive更多你所想達到什麼目的?

+0

它是一個不好的做法,這樣使用new關鍵字:「公共新布爾IsAuthorized {獲得;組; }'? – 2011-05-23 08:16:51

+0

@ lljaker號'新'和'覆蓋'用於不同的目的。 – Kang 2011-05-23 08:23:40

4

它的屬性,你作爲方法isAuthorized()

() - 用於方法

你必須在你的派生類

public override bool isAuthorized 
    { 

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



public override bool isAuthorized 
{ 
... 
} 
0

做在基類中標記屬性作爲virtual你想被覆蓋,並在派生類使用override關鍵字爲n eeds被覆蓋。

+0

即便如此,_overriding_成員是一種方法,而基地的一個屬性 – 2011-05-23 08:06:52

0

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

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

您好我想你必須宣佈本作中能夠虛擬覆蓋

像:

公共虛擬BOOL isAuthorized
{
得到{_Authorized; }
set {_Authorized = value; }
}

Regars,

0

在基類中,你可以將其標記爲虛擬的,你可以重寫。 其實,使用反射器我們可以看到屬性也是方法!

0

關於您的錯誤和語法: 只是不使用'()'。您正在使用屬性作爲方法。

關於如何操作:

有兩種方法可以在基類中實現它。 'new'和'override'。但是它們的實現因基類而異。

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 }