抛弃 反射得到属性的名称,为何不可以?为什么微软就是不去实现!!!
问题描述:
自从有了ORM之类的需求,也就有了一个实质存在的棘手问题。
那就是,如何知道某个类型的的字段。
而最简单的需求就像下面这样:
我们先定义一个实体:
public class Model { public static string Name{get;set;} }
ok,我们最简单的需求就是需要像下面这样调用:
string selectstring; selectstring="select "+Model.Name+" from " + Model; //而我们希望得到selectstring的结果是下面这样: //selectstring output:
select Name from Model
很可惜不行,因为编译器会报N个错误。。。。
我们知道,静态成员的调用是下面这样:
//假设有下面这个类 public class SModel { public string Name{get;set;} } //而调用就是下面这样: SModel.Name
但是,当我们在同一个类中写两个相同的属性的名称是不可行的:
//假设有下面这个类 public class SModel { public string Name{get;set;} public static string Name{get;set;} } //上面的定义会直接报错。。。。
那么总结一下,为什么不能实现像我们上面所需要的那样呢。。。
既然当我们调用例如:
SModel.Name
的时候,编译器已经给给我们剔除了静态字段和实例字段不可以重复。因此就不会产生冲突。
但是,还有一个问题,就是编译器不知道
我们上面那样调用到底是要获取SModel.Name的值还是 这个字段的名称 "Name".
我的想法是这样,可以增加一个关键字例如 :"@"或者"$"之类的
而这个关键字的作用是标识我们要取的时候:
这样我们需要的时候就可以像这样:
@SModel //得到"SModel" @SModel.Name //得到"Name" //于此同时还可以增加一个变量用于保存成员的名称的列表: //例如下面这样: @SModel@ //这个语法可以输出所有的成员列表,例如返回一个数组什么。。。 @SModel@[i] //这个语法可以根据索引获取成员名称。。。
//多好的办法,但问题是.net 本身比较封闭,与此同时,其实我在想,要是C#编译器本身可以提供一些插件式的接口,例如上面的这个功能官方不给我们实现,我们自己实现的话,应该会非常不错的。但是很可惜。
事实是没有。。。回到现实。
大家任然在苦逼地纠结着。。。。去实现。。。
这里吐槽一下作为.net 程序员的辛苦。应该说.net 的开发,类库的强大,也给我们带来了不少方便,但是与此同时。
由于MS自身并没有提供对操作系统更加完整的封装,我们很累。。。
还有就是其实C#也可以操作硬件。为什么不可以,当然可以。C#也可以写驱动。。。
只是。。。
我们需要的是一个 编译器。
一个平台,一个支持。
对于C#写汇编有兴趣的同学可以到Codeplex.com 去找一下Cosmos项目,开源操作系统。。。
里面有很多宝贝,只是我精力有限。。。
而且不是闲人,整天忙着做一些重复劳动去挣钱,没那么多时间 研究。。。
希望以后等我有钱了,闲了,再看看吧。
C#也一直在更新自己,但是,不知道为什么微软总是在我们非常需要的东西上,就是不给你。
我至今 也不知道怎么给微软反馈。。。
之前上过MSDN的社区,感觉做得很烂,而且Windows Live 登录要很久很久很久。。。
发个帖子也要很久很久很久。。。想想算了吧,MS要是哪一天倒掉了,我还要继续活下去。。。