类c#中的类

时间:2012-10-30 09:00:31

标签: 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;

可以这样做吗?

6 个答案:

答案 0 :(得分: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是程序集中的一个类。

答案 1 :(得分:1)

不,不能那样做。该类不是方法,属性或由类实例化的任何东西。

这也是非常糟糕的设计: - )

但你可以说:

var myclass = new ClassOne.ClassTwo()

答案 2 :(得分: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();
}

答案 3 :(得分: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之外访问,则可以internal newClient代替newClient.ClientExtraData clientExtraData = new newClient.ClientExtraData();

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

那么你可以这样做:

{{1}}

答案 4 :(得分:0)

使用您的代码完全实现此目的

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

newClient类必须为public ClientExtraData课程必须为publicstatic

但更好的方法是创建类,其中newClient包含ClientExtraData类实例的Get-Property。

查看Access Modifiers (C# Programming Guide)

答案 5 :(得分:0)

  1. 将内部类设为公共,以便可以访问它。
  2. 将您需要访问的属性设置为静态(或创建实例以访问该字段)
  3. 类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(); string s = newClient.ClientExtraData.ExtraField1;

相关问题