构造函数初始化vs get set初始化

时间:2015-10-28 21:15:51

标签: c#

  

如果使用构造函数初始化类对象,则只能通过成员方法直接访问成员变量(objectname.variablename)。

  

如果使用get; set;初始化类对象;那么成员变量只能通过get; set;来访问。属性。

这些陈述是真的吗?或者我在这里遗漏了什么?

以下是代码的代码和输出。

using System;
public class emp {

    private int empId = -1;
    private string empName = string.Empty;

    public int PEmpId {
        set;
        get;
    }
    public string PEmpName {
        set;
        get;
    }

    public emp(int i, string str) {
        empId = i;
        empName = str;
    }

    public void empDis(emp e) {
        Console.WriteLine("Id =>{0}<=, Nm =>{1}<=", e.empId, e.empName);
        Console.WriteLine("Id =>{0}<=, Nm =>{1}<=", e.PEmpId, e.PEmpName);
    }

    public emp() {}
}

public class empUsage {

    public void Main() {
        emp e = new emp(1, "R");
        e.empDis(e);
        emp e1 = new emp();
        e1.PEmpId = 1;
        e1.PEmpName = "W";

        e1.empDis(e1);
    }

}

输出:

Id =>1<=, Nm =>R<=  
Id =>0<=, Nm =><=  

Id =>-1<=, Nm =><=  
Id =>1<=, Nm =>W<=

4 个答案:

答案 0 :(得分:4)

这些陈述是无稽之谈。成员的初始化方式与访问方式之间没有关系。

emp类包含成员变量和属性。如果初始化成员变量,则可以从成员变量中获取值。如果初始化属性,则可以从属性中获取值。

获取参数的构造函数使用这些值初始化成员变量。这意味着您在成员变量中有值,因此您可以使用它们。但是,如果您愿意,它也不会使您初始化属性并使用它们。

答案 1 :(得分:1)

是的,但是您的get / set实现已关闭:

public int PEmpId {
    set { empId = value; }
    get { return empId; }
}
public string PEmpName {
    set { empName = value; }
    get { return empName; }
}

除非您想要&#34;自动(或隐式)属性&#34;,否则您不需要empIdempName字段。

答案 2 :(得分:0)

  

如果使用构造函数然后使用成员初始化类对象   变量只能直接访问(objectname.variablename)   通过会员方法。

     

如果使用get; set;初始化类对象;然后是会员   变量只能通过get; set;来访问。属性。

这两种说法都是不真实的。成员初始化的方式与您访问它们的方式没有直接关系。在讨论直接引用成员时,后者由访问修饰符privatepublic等)指定。如果您将字段设为公共字段,则可以使用您的类直接访问它们,无论它们如何实例化。另一方面,如果您将它们设为私有,那么只有类内部的代码才能访问它们,这取决于您如何实现此访问。您可以公开getter和/或setter,创建一个可以更改其值的方法,或者两者都是(或者没有)。无论初始化方式如何,所有这些选项都是可能的。

答案 3 :(得分:0)

  

这些陈述是真的吗?

没有

  我在这里错过了什么吗?

是。在我看来,你不明白

  • 访问修饰符。例如publicprivate
  • 与视野相对的属性
  • 信息隐藏的一般概念,a.k.a。封装。