了解结构
本文关键字:结构 了解 | 更新日期: 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; }
}
使用上面的代码,我可以毫无问题地访问Class1
和Class2
的属性。但是,如果我做类似的事情。
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; }
}
}
Class2
是internal
类声明,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
访问