了解结构

本文关键字:结构 了解 | 更新日期: 2023-09-27 18:30:55

假设在 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# 的过程中,所以如果这是基本的东西,那么我深表歉意。

更多信息

如果我想从数据库获取值,我使用以下代码。

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;
    }
}

了解结构

那是因为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;
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访问