【问题标题】:Understanding the structure了解结构
【发布时间】:2014-11-18 15:24:04
【问题描述】:

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

【问题讨论】:

  • 你能举个例子说明你是如何尝试“访问Class2的属性的吗?实际上应该是可以的。
  • “我将无法访问 Class2 的属性” - 似乎完全错误...Class1.Class2 应该完全可见 - 请显示演示“无法访问”部分的代码。
  • var c2 = new Class1.Class2() { Age = 24 };
  • 如果方法在 Class1 内,您添加的代码和 sql 查询应该可以正常工作
  • 代码,你还没有解释什么“我无法访问 Class2 的属性,但编译时没有任何错误。”表示并显示示例 - 您发布了代码,但不清楚它是否显示“无法访问”或什么。显示和注释您认为不应该工作的代码以及您预计会在哪里出现编译时错误。

标签: c#


【解决方案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;

【讨论】:

  • 谢谢我现在明白了
【解决方案2】:
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; }
    }
}

Class2Class1 中的internal 类声明,您尚未声明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访问

【讨论】:

    猜你喜欢
    • 2011-11-16
    • 2020-05-10
    • 2016-04-27
    • 2019-01-08
    • 1970-01-01
    • 2015-12-25
    • 2011-09-19
    • 2013-05-18
    • 2010-09-21
    相关资源
    最近更新 更多