了解结构

时间:2014-11-18 15:24:04

标签: c#

在C#中假设以下代码。

public class Class1
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Class2
{
    public int Age{ get; set; }
    public int Dob{ get; set; }
}

使用上面的代码,我可以访问Class1Class2的属性而不会出现问题。但是,如果我做了类似的事情。

public class Class1
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public class Class2
    {
        public int Age{ get; set; }
        public int Dob{ get; set; }
    }
}

我无法访问Class2的属性,但编译时没有任何错误。有人能解释一下为什么会这样吗?我还处在C#的学习过程中,所以如果这是基本的话,我会道歉。

更多信息

如果我想从DB获取值,请使用以下代码。

public static int Age()
{
    using (SqlConnection connection = new SqlConnection(ConnectionString))
    {

        string userName = HttpContext.Current.User.Identity.Name;

        Class2 info = new Class2();

        using (SqlCommand cmd = new SqlCommand("SELECT Age FROM Users WHERE UserName=@userName"))
        {
            cmd.Parameters.AddWithValue("UserName", userName);
            cmd.Connection = connection;
            connection.Open();
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    info.Age= reader.GetInt32(0);
                }
            }
        }
        return info.Age;
    }
}

2 个答案:

答案 0 :(得分:1)

那是因为Class2成为嵌套类。您可以像这样创建它:

Class1.Class2 class2 = new Class1.Class2();

然后您可以像所有正常情况一样使用他的属性:

class2.Age = 0;
class2.Dob = 0;

但我认为你想要达到的目标是拥有Class2类型的属性:

public class Class1
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Class2 Info { get; set; }
}

public class Class2
{
    public int Age{ get; set; }
    public int Dob{ get; set; }
}

然后你可以访问他的参数:

Class1 class1 = new Class1();
class1.Info = new Class2();

class1.Info.Age = 0;
class1.Info.Dob= 0;

答案 1 :(得分:0)

public class Class1
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public class Class2
    {
        public int Age{ get; set; }
        public int Dob{ get; set; }
    }
}

Class2internal中的Class1类声明,您尚未声明Class2的实例,因此无法获取这些字段。满足你想要的东西:

public class Class1
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Class2 Instance {get; set;}

    public class Class2
    {
        public int Age{ get; set; }
        public int Dob{ get; set; }
    }
}

然后使用myClass1.Instance.Age

进行访问