您的位置:首页 > 其它

抛弃 反射得到属性的名称,为何不可以?为什么微软就是不去实现!!!

2013-01-17 07:19 330 查看
问题描述:

自从有了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要是哪一天倒掉了,我还要继续活下去。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐