2012-10-30 45 views
-2

我想在類中定義一個類。類中的類c#

例如:

private class newClient 
{ 
    public int ID { get; set; } 
    public string Name{ get; set; }   

    private class ClientExtraData 
    { 
     public string ExtraField1 { get; set; } 
     public string ExtraField2 { get; set; } 
    } 
} 

現在我想訪問ExtraField1以這樣的方式:

newClient nclnt= new newClient(); 
string s=nclnt.ClientExtraData.ExtraField1; 

可以這樣做?

+2

你用這種奇怪的方式解決你的原始任務是什麼? – zerkms

+0

使其成爲靜態或在父類中創建一個實例。 – Aphelion

+4

如何聲明一個公共屬性返回'ClientExtraData' –

回答

0

不,您不能以這種方式訪問​​內部類nclnt.ClientExtraData.ExtraField1;,因爲如果要訪問其屬性,則必須擁有該對象的實例。 那麼你就不能使用private訪問修飾符,但你必須以這種方式來使用internal

class newClient 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public ClientExtraData clientExtraData{ get; set; } 

    public newClient() 
    { 
     clientExtraData = new ClientExtraData(); 
    } 

    internal class ClientExtraData 
    { 
     public string ExtraField1 { get; set; } 
     public string ExtraField2 { get; set; } 
    } 
} 

也可以使ClientExtraDatapublic而不是internal如果你想外面newClient訪問它以這種方式:

newClient.ClientExtraData clientExtraData = new newClient.ClientExtraData(); 

,那麼你可以這樣做:

newClient nclnt= new newClient(); 
string s = nclnt.clientExtraData.ExtraField1; 
+0

曾效力福克斯,謝謝。 – Dror

0

我通常做這種東西是這樣的:

//the two classes can live in the same code file, if you want. 
private class ClientExtraDataClass 
{ 
    public string ExtraField1 { get; set; } 
    public string ExtraField2 { get; set; } 
} 
private class newClient 
{ 
    public int ID { get; set; } 
    public string Name{ get; set; } 

    //you may want to make it a readonly property too, 
    // it depends on your needs. 
    public ClientExtraDataClass ClientExtraData = new ClientExtraDataClass(); 
} 
1

沒有它不能這樣做。班級不是一種方法,財產或任何由班級立足的東西。

這也是非常糟糕的設計:-)

但是你可以說:

VAR MyClass的=新ClassOne.ClassTwo()

3

,實現以下,

newClient nclnt= new newClient(); 
string s=nclnt.ClientExtraData.ExtraField1; 

所有你需要做的就是暴露這樣的財產

private class NewClient 
{ 
     public class NewClient() 
     { 
      this.ClientExtraData = new ClientData(); 
     } 
     public int ID { get; set; } 
     public string Name{ get; set; } 
     public ClientData ClientExtraData {get;set;} 
} 

其中ClientData是組裝中的一個類。

+0

不要忘記在構造函數中實例化它。 – Aphelion

+0

@Aphelion我會把它留給實現它的開發者,因爲在創建類時,很少有場景需要初始化它。 – Ramesh

+0

我不同意。他想訪問該領域,所以它應該在那裏;) – Aphelion

0

準確archieve這與您的代碼

newClient nclnt= new newClient(); 
string s=nclnt.ClientExtraData.ExtraField1; 

newClient類必須publicClientExtraData類必須publicstatic

但更好的方法是definetly創建上課,其中newClient包含一個Get-Property到ClientExtraData類的實例。

看看Access Modifiers (C# Programming Guide)

0
  1. 使內部類公有的,因此它可以被訪問。
  2. 讓你需要訪問靜態屬性(或創建實例來訪問該字段)

類newClient { 公衆詮釋ID {獲得;組; } public string Name {get;組; }

public class ClientExtraData 
    { 
     public static string ExtraField1 { get { return "10"; } } 
     public string ExtraField2 { get; set; } 
    } 
} 

接入代碼:

newClient nclnt =新newClient(); string s = newClient.ClientExtraData.ExtraField1;