谁能帮解答一下,下面两张图片的运行结果为什么不同,属性和字段本来不就相通吗,怎么结果就不同了呢,谢谢
DataSource 只会获取集合中的属性来绑定,字段和属性的区别楼上们说得很多了
好的。谢谢
你可以当成字段是变量,属性是方法
可是运行结果为什么不同呢,这个问题出在哪里?
@初秋的雨: 你试下首字母改成大写。。。。
@吴瑞祥:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
CStudent[] stus = new CStudent[] { new CStudent("张三", 1, "北京海淀"), new CStudent("李四", 2, "上海黄浦") };
this.dataGridView1.DataSource = stus;
}
}
class CStudent
{
public string Name;
public int Id;
public string Address;
//public string Name { get { return name; } }
//public int ID { get { return id; } }
//public string Address { get { return address; } }
public CStudent(string nm, int i, string ad)
{
Name = nm; Id = i; Address = ad;
}
}
我这样改了还是不行,我觉得这跟大小写没关系吧
@初秋的雨: 还是感觉问题在于你的表格配置问题
属性 === 方法,字段才是具体保存值的变量。
public string Name{get; set;} 等价于 private string name; //Console.WriteLine(Name); public string GetName(){ return name; } //Name = 'aaa'; public void SetName(string name){ this.name = name; }
谢谢
属性跟字段最大的区别在于取值赋值的操作逻辑是不一样的,对于字段,就是直接取值赋值,而对于属性,你可以自定义取值赋值的操作。可以认为属性是两个方法(一个取值一个赋值)合并的,取值的方法是无参数、返回值为属性类型的,赋值的方法是参数为属性类型、无返回值的
另一个差别在于字段只能是即能赋值又能取值,要么即不能赋值也不能取值,而属性更灵活,如果之后set就只能赋值了
代码演示
int someIntField = 1;
int someIntProperty
{
set { someIntField = value; }
get { return somrIntField; }
}
上面这属性的写法可以看成是下面两方法合并而成的:
void set_someIntProperty(int value)
{
someIntField = value;
}
int get_someIntProperty()
{
return somrIntField;
}
简而言之,属性有比字段更大的灵活性和可扩展性,但没有字段轻量,如果预支某项未来不会有什么变化且既要赋值又要取值,那么字段更省资源,其他情况下应属性或方法
已明白,谢谢
属性实际上是两个方法,比如你声明一个属性:
public int Age { get; set; }
在生成的IL代码里面,实际上可以看到两个方法:
pubic int GetAge(){} public int SetAge(int value){}
谢谢