首页 新闻 搜索 专区 学院

C# 字段和属性有什么不同?

0
悬赏园豆:10 [已解决问题] 解决于 2015-05-22 10:00

谁能帮解答一下,下面两张图片的运行结果为什么不同,属性和字段本来不就相通吗,怎么结果就不同了呢,谢谢

初秋的雨的主页 初秋的雨 | 初学一级 | 园豆:190
提问于:2015-05-21 21:42
< >
分享
最佳答案
1

DataSource  只会获取集合中的属性来绑定,字段和属性的区别楼上们说得很多了

收获园豆:3
Yu | 专家六级 |园豆:12944 | 2015-05-22 09:23

好的。谢谢

初秋的雨 | 园豆:190 (初学一级) | 2015-05-22 09:55
其他回答(4)
0

你可以当成字段是变量,属性是方法

收获园豆:1
吴瑞祥 | 园豆:28820 (高人七级) | 2015-05-21 21:45

可是运行结果为什么不同呢,这个问题出在哪里?

支持(0) 反对(0) 初秋的雨 | 园豆:190 (初学一级) | 2015-05-21 21:47

@初秋的雨: 你试下首字母改成大写。。。。

支持(0) 反对(0) 吴瑞祥 | 园豆:28820 (高人七级) | 2015-05-21 21:48

@吴瑞祥: 

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

我这样改了还是不行,我觉得这跟大小写没关系吧

支持(0) 反对(0) 初秋的雨 | 园豆:190 (初学一级) | 2015-05-21 21:51

@初秋的雨: 还是感觉问题在于你的表格配置问题

支持(0) 反对(0) 吴瑞祥 | 园豆:28820 (高人七级) | 2015-05-22 09:18
0

属性 === 方法,字段才是具体保存值的变量。

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;
}
收获园豆:2
幻天芒 | 园豆:36594 (高人七级) | 2015-05-22 08:57

谢谢

支持(0) 反对(0) 初秋的雨 | 园豆:190 (初学一级) | 2015-05-22 09:56
0

属性跟字段最大的区别在于取值赋值的操作逻辑是不一样的,对于字段,就是直接取值赋值,而对于属性,你可以自定义取值赋值的操作。可以认为属性是两个方法(一个取值一个赋值)合并的,取值的方法是无参数、返回值为属性类型的,赋值的方法是参数为属性类型、无返回值的
另一个差别在于字段只能是即能赋值又能取值,要么即不能赋值也不能取值,而属性更灵活,如果之后set就只能赋值了
代码演示
int someIntField = 1;
int someIntProperty
{
set { someIntField = value; }
get { return somrIntField; }
}
上面这属性的写法可以看成是下面两方法合并而成的:
void set_someIntProperty(int value)
{
someIntField = value;
}
int get_someIntProperty()
{
return somrIntField;
}

简而言之,属性有比字段更大的灵活性和可扩展性,但没有字段轻量,如果预支某项未来不会有什么变化且既要赋值又要取值,那么字段更省资源,其他情况下应属性或方法

收获园豆:2
女孩,加油 | 园豆:1093 (小虾三级) | 2015-05-22 09:10

已明白,谢谢

支持(0) 反对(0) 初秋的雨 | 园豆:190 (初学一级) | 2015-05-22 09:56
0

属性实际上是两个方法,比如你声明一个属性:

public int Age
{
    get;
    set;      
}

在生成的IL代码里面,实际上可以看到两个方法:

pubic int GetAge(){}

public int SetAge(int value){}
收获园豆:2
zhoumy | 园豆:603 (小虾三级) | 2015-05-22 09:16

谢谢

支持(0) 反对(0) 初秋的雨 | 园豆:190 (初学一级) | 2015-05-22 09:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册