2012-04-25 111 views
3

我們可以在外部類的構造函數中創建內部類的對象到C#中嗎?它合法嗎?將內部類對象轉換爲C#的外部類構造函數#

public class Outer 
{ 
    public Inner InnerObj {get; set; } 

    public Outer() 
    { 
     Inner inner = new Inner(); 
    } 

    public Outer(Inner inner) 
    { 
     InnerObj = inner; 
    } 

    public class Inner 
    { 
    } 
} 

爲Java我把從參考以下鏈接: Can we create an object of the inner class in the constructor of the outer class?

我的同事說,這是不可能在C#中,它是完全非法的。請指導我。

+5

接受一些答案... – MoonKnight 2012-04-25 07:58:22

+2

你試過吧!? – 2012-04-25 08:06:02

+1

你應該聽聽編譯器,而不是聽你的同事以及可能不是我們這樣的小事。不難看出[它編譯得很好](http://ideone.com/79YB9)。 – Jon 2012-04-25 08:07:38

回答

2

如果你聲明的內部類公共

public class Inner { } 
+0

是的,我的內部班是公共班。 – 2012-04-25 08:00:37

1

的問題與您的代碼很可能是如何調用代碼知道內蒙古obj是什麼,因爲它不是外部類的外部訪問。

更好的設計是讓外部類的內部類不會緊密耦合。還要將對象傳遞給接口。

public class Outer 
{   
    public Outer(IInner inner) 
    { 

    } 
} 

public class Inner: IInner 
{ 
} 

public Interface IInner 
{ 
} 
0

這是非法的(會導致編譯器錯誤),直到Innerpublic

標記爲公開後,它是絕對合法的。

+0

公共課上的內部課堂。現在是非法的。 – 2012-04-25 08:04:04

+1

@sarooptrivedi:現在一切都很好。 FCL本身也是如此,例如'字典 + KeyCollection'(你可以使用Reflector查看) – abatishchev 2012-04-25 08:07:38

+0

我會試試這個。 – 2012-04-25 08:14:01

相關問題