2009-10-19 43 views
0

好返回類型不正確,我通過一些代碼掃描昨天我看到這個,從功能

代碼:

public class MyBaseClass 
    { 
     public string Field0() 
     { 
      return string.Empty; 
     } 
    } 

    public class MyClass : MyBaseClass 
    { 
     public string Field1() 
     { 
      return String.Empty; 
     } 
    } 

很簡單沒有抱怨那裏。在主代碼,

代碼:

private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private MyBaseClass GetSomthing() 
     { 
      var retVal = new MyClass(); 
      return retVal; 
     } 

下面這段代碼編譯正確,即使功能GetSomthing()有MyBaseClass的返回類型,它實際上允許MyClass的迴歸(我認爲這是因爲的繼承)。

我在別人的Somone的代碼看準了這一點,對我似乎不良做法,雖然我可能會丟失的財產以後,任何人有什麼想法?

回答

7

爲什麼不良做法?這絕對沒問題。例如,您可能希望:

public IEnumerable<string> GetNames() 
{ 
    return new List<string> { "Fred", "Jon", "Joe" };   
} 

它的意義從一個角度封裝點 - 你分離的東西你願意,以保證給調用者接口(這將是一個序列從實施(字符串)您使用的是List<string>)。這可讓您在不打擾呼叫者的情況下更改實施。

這是良好的做法,而不是實踐。

2

MyClass實例也是MyBaseClass一個實例,所以它是完全有效的(普通)這樣做...