2015-10-28 196 views
-4

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

而且

如果一个类对象是使用GET初始化;设置;那么成员变量只能通过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<= 
+2

这必须是作业或某种测试问题。 –

+0

不,不是。我正在通过编码示例自己学习c sharp。 – user3594120

+2

开始阅读一些教程,以及有关在线教程的在线免费示例http://www.csharp-station.com/Tutorial/CSharp/SmartConsoleSetup.aspx – MethodMan

回答

1

没错,但你的了get/set的实现是关闭:

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

,除非你想 “自动(或隐含的)属性”,那么你不需要empIdempName字段。

+0

*“确实,”*确切地说,这是真的? –

+0

@JonathonReinhart,从我的阅读中可以了解'领域'和'属性'之间的区别 – GreatAndPowerfulOz

+0

@ Gread.And.Powerful.Oz你是对的。 get set声明关闭。当我修复它们时,我能够通过成员和通过属性访问值。 谢谢你不要打电话给我的问题和陈述“不理智”,不像别人回答。 – user3594120

4

那些陈述是无稽之谈。成员如何初始化以及如何访问它们之间没有关系。

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

带参数的构造函数使用这些值来初始化成员变量。这意味着你在成员变量中有值,所以你可以使用这些值。但是,它不会阻止您初始化属性并使用它们(如果您喜欢)。

0

如果使用构造则构件 变量只能经由构件方法仅直接(objectname.variablename) 访问初始化类对象。

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

这两个陈述都是不真实的。成员初始化的方式并不直接与您如何访问它们。当谈到直接引用成员时,后者由访问修饰符private,public等)指定。如果你公开你的领域,那么无论他们是如何实例化的,他们都可以被任何使用你的类的代码直接访问。另一方面,如果你将它们设置为私有的,那么只有类内部的代码才能访问它们,这取决于如何实现。你可以公开一个getter和/或setter,创建一个方法来改变它们的值,或者两者都是(或者都不是)。无论初始化方式如何,所有这些选项都是可能的。

0

这些说法是否正确?

我失去了一些东西在这里?

是。在我看来,你不明白

  • 访问修饰符。例如public,private
  • 属性相对于字段
  • 信息隐藏的一般思想,又名封装。