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


    问题描述:

    自从有了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要是哪一天倒掉了,我还要继续活下去。。。

  • 相关阅读:
    git 工作流程
    微信小程序 scroll-view 水平滚动使用
    微信小程序 tree组件
    微信小程序各类生命周期
    JS/Jquey 图片链接点击直接下载
    JS/Jquery 表单方式提交总结
    Nodejs 发送邮件 激活邮箱
    搭建Nodejs环境 创建Express应用
    break、continue、return区别
    shell(一)
  • 原文地址:https://www.cnblogs.com/SHGF/p/2863683.html
Copyright © 2020-2023  润新知