日期:2014-05-18  浏览次数:20887 次

C#基础问题
在窗体程序中,定义了一个类,类中若干字段。
在窗体载入事件中定义一个list集合 (集合.Add(new 类(){ XXXXX })加载内容。 用dataGridView.DataSource显示出来 为什么类中字段必须封装?不封装dataGridView显示不了内容?

------解决方案--------------------
贴点代码出啦吧。
------解决方案--------------------
代码贴出来看下吧
------解决方案--------------------
对,绑定只能认属性而不能认公共字段。
------解决方案--------------------
直接的原因是绑定程序会遍历类的属性而不会去找公有字段。

更深层次的原因是公有字段根本就是不应该使用的东西,一个类只能由自己改变内部状态,这是OOP所说的封装。
------解决方案--------------------
一定要写get set是因为事实上c#编译器会把属性编译成getXXX setXXX 方法,如果你的属性只有get没有set那就是个只读属性 这样子做是因为属性可以包含一些验证之类的东西 而字段是没有的 并且有些属性本身是不对应任何字段的 比如我做控件的时候有些属性其实对应的是ViewState里面的东西
数据绑定控件我没有看过源码 但是绑定的时候因为是通过给字符串表示的属性名 那么事实上是通过反射去查看元数据里面是否有这个名字的属性然后调用了getXXX方法而已