-2

クラス内にクラスを定義したい。

例:

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;

これはできますか?

4

6 に答える 6

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アセンブリ内のクラスはどこにありますか。

于 2012-10-30T09:04:59.643 に答える
1

いいえ、そのようにすることはできません。クラスは、メソッド、プロパティ、またはクラスによってインスタンス化されるものではありません。

それも非常に悪いデザインです:-)

しかし、あなたは言うことができます:

var myclass = new ClassOne.ClassTwo()

于 2012-10-30T09:04:21.043 に答える
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();
}
于 2012-10-30T09:03:50.200 に答える
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; }
    }
}

または、次のように外部からアクセスできるようにする場合は、ClientExtraData public代わりに作成できます。internalnewClient

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

だからあなたはすることができます:

newClient nclnt= new newClient();
string s = nclnt.clientExtraData.ExtraField1;
于 2012-10-30T09:05:34.693 に答える
0

これをコードで正確にアーカイブするには

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

newClientクラスはである必要がpublic あり、クラスClientExtraDataはである必要がpublicあり、static

ただし、より良いアプローチは、クラスを作成することです。ここで、newClientには、ClientExtraDataクラスのインスタンスへのGet-Propertyが含まれています。

アクセス修飾子を見てください(C#プログラミングガイド)

于 2012-10-30T09:09:44.020 に答える
0
  1. 内部クラスをパブリックにして、アクセスできるようにします。
  2. アクセスする必要のあるプロパティを静的にする(またはフィールドにアクセスするためのインスタンスを作成する)

class newClient {public int ID {get; セットする; } public string Name {get; セットする; }

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

アクセスコード:

newClient nclnt = new newClient(); 文字列s=newClient.ClientExtraData.ExtraField1;

于 2012-10-30T09:14:23.973 に答える