2011-02-24 217 views
12

我有一個具有setter方法的屬性的基類。有沒有辦法從派生類中調用基類中的setter,併爲其添加更多功能,就像我們使用base關鍵字處理overriden方法一樣。C#是否可以從派生類中調用基類屬性

對不起,我應該添加一個例子。這是一個例子。希望我得到它的權利:

public class A 
{ 
    public abstract void AProperty 
    { 
     set 
     { 
      // doing something here 
     } 
    } 
} 

public class B : A 
{ 
    public override void AProperty 
    { 
     set 
     { 
      // how to invoke the base class setter here 

      // then add some more stuff here 
     } 
    } 
} 
+0

你真的試過打電話給自己嗎? – 2011-02-24 17:37:33

+4

你所有的基地都屬於你。當然,你可以做到這一點。你可以在setter中使用base。 – 2011-02-24 17:39:15

+0

你能舉一個你想做什麼的例子嗎? – Vadim 2011-02-24 17:39:44

回答

21

編輯:修訂後的例子應該demostrate調用的順序。編譯爲控制檯應用程序。

class baseTest 
{ 
    private string _t = string.Empty; 
    public virtual string t { 
     get{return _t;} 
     set 
     { 
      Console.WriteLine("I'm in base"); 
      _t=value; 
     } 
    } 
} 

class derived : baseTest 
{ 
    public override string t { 
     get { return base.t; } 
     set 
     { 
      Console.WriteLine("I'm in derived"); 
      base.t = value; // this assignment is invoking the base setter 
     } 
    } 
} 

class Program 
{ 

    public static void Main(string[] args) 
    { 
     var tst2 = new derived(); 
     tst2.t ="d"; 
     // OUTPUT: 
     // I'm in derived 
     // I'm in base 
    } 
} 
+0

您實際上並沒有調用基類屬性「t」中的setter正在執行的操作。如果基本setter't'有10行代碼,我們可以從派生類中調用它,以便這10行代碼被執行,然後我們添加額外的代碼行 – Shahid 2011-02-24 18:07:08

+0

@Shahid是的。嘗試更改基類設置器中的代碼爲\t \t set {Console.WriteLine(「I'm in base」); _t = value;}並親自查看。 – 2011-02-24 18:10:53

+0

謝謝保羅。我一直愚蠢地忽略這一點。我現在接受你的回答 – Shahid 2011-02-25 10:28:04