2013-08-18 72 views
1

訪問不同的屬性值有ViewModelBase與派生DerivedViewModel我如何在派生類

ViewModelBase具有DoSomething()它訪問AProperty

DerivedViewModel也使用DoSomething(),但它需要訪問不同的對象。

背後的原因是ViewModel在屏幕上以及在對話框中使用。當它在屏幕中時,它需要訪問特定的實體,但是當它在對話框中時,它需要訪問不同的實體。

這是簡化的代碼。如果你運行它,它們都返回A,而不是A,然後返回B.所以問題是,如何返回A,然後返回B?

class Program 
{ 
    static void Main(string[] args) 
    { 
     ViewModelBase bc = new ViewModelBase(); 
     bc.DoSomething(); Prints A 

     DerivedViewModel dr = new DerivedViewModel(); 
     dr.DoSomething(); Prints A, would like it to print B. 


    } 
} 

public class ViewModelBase { 

    private string _aProperty = "A"; 

    public string AProperty { 
     get { 
      return _aProperty; 
     } 
    } 

    public void DoSomething() { 
     Console.WriteLine(AProperty); 
    } 

} 

public class DerivedViewModel : ViewModelBase { 

    private string _bProperty = "B"; 
    public string AProperty { 
     get { return _bProperty; } 


} 
+1

有一個錯字:第二個'bc.DoSomething();'應'dr.DoSomething( );' – BartoszKP

+0

錯字固定,但它仍然返回A,答: –

+0

是的,現在考慮Sriram Sakthivel的答案,它會很好:) – BartoszKP

回答

3

覆蓋在派生類的屬性

public class ViewModelBase 
{ 
    private string _aProperty = "A"; 
    public virtual string AProperty 
    { 
     get { return _aProperty; } 
    } 

    public void DoSomething() 
    { 
     Console.WriteLine(AProperty); 
    } 
} 

public class DerivedViewModel : ViewModelBase 
{ 
    private string _bProperty = "B"; 
    public override string AProperty 
    { 
     get { return _bProperty; } 
    } 
} 

DerivedViewModel dr = new DerivedViewModel(); 
dr.DoSomething();//Prints B 

此外看一看Msdn Polymorphism

+0

這正是我所尋找的。這個http://stackoverflow.com/questions/159978/c-sharp-keyword-usage-virtualoverride-vs-new解釋了它的工作原理(Override vs New) –