GO To Definition的背后操作【VS2015 C#】

使用VS开发U3D项目时,去察看某个变量的声明,比如某组件的gameObject变量,会看到如下代码

一看似乎有点晕,这代码什么意思啊,就一个 public GameObject gameObject {get;}

这有点像属性的简洁声明:

但事实是这样的吗? 经过测试,并非如此

写一个小程序来验证下就知道了。

首先写一个DLL程序,然后写一个测试程序来引用这个DLL,在测试程序中对变量使用go to definition,我们看到,不论dll中定义的属性有多么复杂,go to definition总是只能看到简单的 set; get;

DLL程序代码如下:

public class IMsg
    {
        public virtual void Print() { }
    }
   sealed public class xMsg : IMsg
    {
        string msg;
        public string Msg
        {
            set
            {
                if(msg.Length == 0)
                {
                    msg = "init string";
                }
                else
                {
                    msg = value;
                }
            }

            get
            {
                return msg;
            }
        }
        public sealed override void Print()
        {
            Console.WriteLine(msg);
        }

引用DLL的测试程序代码如下:

    class Program
    {
        static void Main(string[] args)
        {
            xMsg ox = new xMsg();
            ox.Msg = "hello";
            ox.Print();
        }
    }

对 xMsg使用 go to definition 我们看到如下代码:

namespace ClassLibrary1
{
    public sealed class xMsg : IMsg
    {
        public xMsg();

        public string Msg { get; set; }

        public sealed override void Print();
    }
}

我们去尝试打开这个文件所在的位置时得到如下,原来是VS生成的临时文件。

这说明了这种文件只是VS给我们预览代码定义用的临时生成文件,并不是可执源码,这样的文件在项目中是不能正常执行的,因为它与我们的程序原文件已经相差太多。

时间: 2024-12-20 21:23:07

GO To Definition的背后操作【VS2015 C#】的相关文章

Easy Graphics Engine vs2015使用

vs2017: 下载 https://pan.baidu.com/s/1qWxAgeK 里面的 “ege19.01_vs2017 (推荐, 修正win10 1809 上无法正常运行的问题).zip”  按如下操作: (更高版本vs也是同理, 附 网友教程) 默认安装的情况下, 把 include目录 里面的东西复制到 C:\Program Files (x86)\Microsoft Visual Studio\2017\<Community/Profeccsional/Enterprise>\

words2

餐具:coffee pot 咖啡壶coffee cup 咖啡杯paper towel 纸巾napkin 餐巾table cloth 桌布tea -pot 茶壶tea set 茶具tea tray 茶盘caddy 茶罐dish 碟plate 盘saucer 小碟子rice bowl 饭碗chopsticks 筷子soup spoon 汤匙knife 餐刀cup 杯子glass 玻璃杯mug 马克杯picnic lunch 便当fruit plate 水果盘toothpick 牙签中餐:bear's

MySQL基础使用

基本操作 MySQL的重要文件 MySQL安装目录\bin\ mysqld.exe MySQL的服务器程序,它必须启动数据库才能正常使用 MySQL安装目录\bin\ mysql.exe MySQL的客户端程序,用来操作MySQL数据库 MySQL安装目录\ my.ini MySQL数据库的配置文件 登录:mysql -u用户名 -p密码 退出:quit或exit 基本SQL语法 SQL语句可以写成单行或者多行,以分号结尾. MySQL中不区分大小写,但是建议关键字大写. SQL语句 数据定义语

安卓 应用app启动过程

韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha [email protected] 从用户点击 Launcher 上的 App 图标,到显示出 App 界面时主要发生的事情.知晓以下知识点. Android Process 的创建过程,以及 Activity Manager Service 是如何参与这个步骤,以及在其中扮演的角色? Android 中所谓的主线程是怎么回事?主线程是谁?又如何被创建的. Android 系统是如何节省进程创建开销的? 在 Android 中

分布式系统数据一致性的6种方案(转)

分布式系统数据一致性的6种方案(转) 编者按:本文由「高可用架构后花园」群讨论整理而成,后花园是一个面向架构师的增值服务,如需了解,请关注「高可用架构」后回复 VIP                                                                                 问题的起源 在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性? 具体业务场景如下,比如一个业务操作,如果同时调用服务 A.B.C,需要满足要

保证分布式系统数据一致性的6种方案(转载)

问题的起源 在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性? 具体业务场景如下,比如一个业务操作,如果同时调用服务 A.B.C,需要满足要么同时成功:要么同时失败.A.B.C 可能是多个不同部门开发.部署在不同服务器上的远程服务. 在分布式系统来说,如果不想牺牲一致性,CAP 理论告诉我们只能放弃可用性,这显然不能接受.为了便于讨论问题,先简单介绍下数据一致性的基础理论. 强一致 当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值.这种是

[转] 不要被C++“自动生成”所蒙骗

http://www.cnblogs.com/fanzhidongyzby/archive/2013/01/12/2858040.html C++对象可以使用两种方式进行创建:构造函数和复制构造函数.假如我们定义了类A,并使用它创建对象. A a,b;A c=a;A d(b); 对象a和b使用编译器提供的默认构造函数A::A()创建出来,我们称这种创建方式为对象的定义(包含声明的含义).对象c和d则是使用已有的对象,通过编译器提供的复制构造函数A::A(const A&)创建,我们称这种创建方式

上海千众国际贸易有限公司上海反贪风暴或揭幕

我的保镖是霸道老大_黑手不是这个人2免费阅读_小说阅读网 蓝冰汐当时一脸的惊讶,她知道陈思思喜欢寒衣. 陈思思看到自己最喜欢的人向蓝冰汐告白,而且这个人在前不久还是自己的秘密男友,三天前不知何故就向自己提出分手的人. 陈思思就这样开始变了,变得连她周围的人都不认识了,变得蓝冰汐都认不出这是当年一直与自己谈笑风生的清纯女孩.总的一句话 巾世缘智能冷热面巾机,陈思思变了. 那时,寒衣身着桃红色衬衫,手里拿着一束玫瑰花,就这样,向蓝冰汐告白. 蓝冰汐紧紧的抓住手里的那叠资料,坚决的说道:"但是我不相信

分布式系统事务一致性

单数据库一致性: 1. 利用事务 分布式系统事务一致性: 1. 本地事务消息队列:两段提交,利用本地事务保证消息的可靠性 生产者: 1). 在数据库(mysql)增加一个消息表,将本地数据修改和消息记录放到同一个事务中,保证同时成功或失败. 2). 本地数据修改成功后,事务提交完毕.producer向MQ发送一个消息,发送成功,更新消息表消息为已读 3). 为避免producer消息发送失败的情况.有一个定时任务,定时查询消息表,将未消费的消息放到MQ的消息队列中 消费者: 1). consum