一个LIST<T>类的小问题,看红色字的地方!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace listtest
{
public class employee
{
public employee(int empID)
{
this.empID = empID;//这个this.empID变量没定义为什么也可以用呢! }
public override string ToString()
{
return empID.ToString();
}
public int empID
{
get;
set;
}
}
class Program
{
static void Main(string[] args)
{
List<employee> emplist = new List<employee>();
List<int> intlist = new List<int>();
for (int i = 0; i < 5; i++)
{
emplist.Add(new employee(i + 100));
intlist.Add(i * 5);
}
for (int i = 0; i < intlist.Count; i++)
{
Console.WriteLine("{0}", intlist[i].ToString());
}
}
}
}
------解决方案--------------------这就是
public int empID
{
get;
set;
}
------解决方案--------------------public int empID{get; set; } 定义了属性。例如你在类里面定义了就可以在其他地方使用了
属性(property)
-充分体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,即借助于get和set对属性的值进行读写;另一方面还可以对数据的访问属性进行控制(当然也可以通过对普通域加readonly关键字来实现。
-设计原则:属性封装了对域的操作。把要访问的域设为private,通过属性中的get和set操作对域进行设置或访问。
-不能把属性作为引用类型或输出参数来进行传递。
-get方法没有参数;set方法有一个隐含的参数value。除了使用了abstract修饰符的抽象属性,每个访问器的执行体中只有分号“;”外,其他的所有属性的get访问器都通过return来读取属性的值,set访问器都通过value来设置属性的值。
-采用间接方式来访问对象的属性(间接调用get、set方法):对象.属性 = 值(调用set),变量 = 对象.属性(调用get)。
-在属性的访问声明中:
只有set访问器,表明该属性是只写的。
只有get访问器,表明该属性是只读的。
既有set访问器,又有get访问器,表明该属性是可读可写的。
------解决方案--------------------
public int empID{get;set;}这种写法叫自动属性
和下面的代码完全等价:
private int _empId;
public int empId
{
get { return _empId; }
set { _empId = value; }
}
这两种代码编译后是一样的,上面只是一种简写形式。