Silverlight反编译系列二常见代码(自动生成属性CompilerGenerated,代码)

  在Silverlight有一些编译后自动生成的代码,最常见的是CompilerGeneratedAttribute和DebuggerNonUserCodeAttribute,下面介绍一下这俩种属性

1.CompilerGeneratedAttribute 自动属性

  使用自动属性后,你可以不用手工声明一个私有成员变量以及编写get/set逻辑,取而代之的是,编译器会自动为你生成一个私有变量和默认的get/set 操作。系统为你产生的私有变量在IDE中,你是看不到的,

如 public string ClassName { get; set; }

上面的代码我们编译后,再用 Reflector 反编译后,我们可以看到上述代码中的属性变成了如下代码:这个编译器给我们产生的私有变量,显然不是那么容易重名的。

 [CompilerGenerated]
    private string <ClassName>k__BackingField;

 

public string ClassName
    {
        [CompilerGenerated]
        get
        {
            return this.<ClassName>k__BackingField;
        }
        [CompilerGenerated]
        set
        {
            this.<ClassName>k__BackingField = value;
        }
    }

你可以看出private string <ClassName>k__BackingField中的ClassName是你定义的属性。编译系统会自动生成get,set方法。
注意:如果你只希望属性有 get 或者 set 方法,这些情况都是无法使用 自动属性的,需要你自己来书写。否则就会报如下的错误:

'ConsoleApplication1.MyClass.Name.set' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors.   

 

但是 get 和 set 访问级别不一样,比如一个是 public,一个是 internal,则可以书写成下述方式,而不会报错误。

public int ID { get; internal set; }

此类型一般都是(极少数除外)在类对应的Xaml中定义过的变量。因此也应该从源码文件中删掉。

使用自动属性后,你可以不用手工声明一个私有成员变量以及编写get/set逻辑,取而代之的是,编译器会自动为你生成一个私有变量和默认的get/set 操作。系统为你产生的私有变量在IDE中,你是看不到的,如下图:

当然如果你希望属性中有些赋值或者取值逻辑校验,自动属性可是不适合你的。

上面的代码我们编译后,再用 Reflector 反编译后,我们可以看到上述代码中的属性变成了如下代码:这个编译器给我们产生的私有变量,显然不是那么容易重名的。

[CompilerGenerated]
private string <>k__AutomaticallyGeneratedPropertyField0;

public string Name
{
    [CompilerGenerated]
    get
    {
        return this.<>k__AutomaticallyGeneratedPropertyField0;

    }
    [CompilerGenerated]
    set
    {
        this.<>k__AutomaticallyGeneratedPropertyField0 = value;
    }
}

注意:如果你只希望属性有 get 或者 set 方法,这些情况都是无法使用 自动属性的,需要你自己来书写。否则就会报如下的错误:

'ConsoleApplication1.MyClass.Name.set' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors.   

但是 get set 访问级别不一样,比如一个是 public,一个是 internal,则可以书写成下述方式,而不会报错误。

public int ID { get; internal set; }

  

2.DebuggerNonUserCodeAttribute 标识不属于应用程序用户代码的类型或成员。

  如果设计器提供的类型和成员不是由用户专门创建的代码的一部分,则会增加调试过程的复杂性。此特性禁止在调试器窗口中显示这些附属类型和成员,并自动逐句通过而不会进入并单步执行设计器提供的代码。当逐句通过用户代码时,如果调试器遇到此特性,用户将不会看到设计器提供的代码,并且会执行用户提供的下一条代码语句。

 [DebuggerNonUserCode]
    public void InitializeComponent()
    {
        if (!this._contentLoaded)
        {
            this._contentLoaded = true;
            Application.LoadComponent(this, new Uri("/ReflectorDemo;component/MainPage.xaml", UriKind.Relative));
            this.LayoutRoot = (Grid) base.FindName("LayoutRoot");
        }
    }
此段代码也是在程序编译后产生。

反编译后将此段代码从源文件中删掉。

2010092010142711.png

3.上图中的private bool _contentLoaded;

 此类代码也是在程序编译后产生。

4.internal MediaElement xMedia1

修饰符为internal的变量一般都是(极少数除外)在类对应的Xaml中定义过的变量。因此也应该从源码文件中删掉。

转载于:https://www.cnblogs.com/salam/archive/2010/09/20/1831544.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

frontcon函数用不了_真香警告!用了XLOOKUP再也回不去VLOOKUP了

作为一名社畜&#xff0c;Excel是必备技能。如果你不会vlookup函数&#xff0c;都不好意思跟别人说你会用Excel。但vlookup也有很大的局限性&#xff0c;比如&#xff1a;首列必须为查找依据列 无法简单的多条件匹配 横向查找等等往往需要进行一些复杂操作的时候我们都需要修改…

LSGO软件技术团队爬山活动

LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为数据分析与计算机视觉。成立几年来为学校培养了一批优秀学生&a…

HDOJ 2526 HDU 2526 浪漫手机 ACM 2526 IN HDU

MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址:http://acm.hdu.edu.cn/showproblem.php?pid2526题目描述:浪漫手机Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 362 Accepted Submissi…

2引擎帮助文档_Simcenter Amesim 16液压部分帮助文档中英文对照(2)

10/49 Hydraulic Component Design Library10/49液压元件设计库The simplest possible check valve consists of a ball which is free to move over a limited displacement.In one extreme position it is fully closed and completely blocks the flow, and in the other ex…

ArcGIS Engine Runtime 10 Setup步骤

首先安装ArcGIS License Manager 10 Setup 其次安装ArcGIS Engine Runtime 10 Setup 再次&#xff0c;拷贝service.txt文件到ArcGIS\License10.0\bin文件夹下&#xff0c;替换原有文件。 运行ArcGIS 许可服务管理器 - 10.0&#xff0c;启动服务。 最后&#xff0c;运行ArcGIS管…

修改Fiddler实用插件JsonViewer

在Web开发中&#xff0c;Fiddler是我们常用的工具&#xff0c;JSON是我们常用的数据格式。本文所要说的JsonViewer就是一款在Fiddler中查看JSON对象的小插件&#xff08;当然它不仅仅是作为Fiddler的插件&#xff0c;还有独立运行版和Visual Studio的插件&#xff09;。关于它的…

matlab用regress方法求ln函数_数学篇|高中数学48条秒杀型公式与方法,一定要掌握!...

「 致于学教育 」高中数学48条秒杀型公式1.适用条件&#xff1a;[直线过焦点]&#xff0c;必有ecosA(x-1)/(x1)&#xff0c;其中A为直线与焦点所在轴夹角&#xff0c;是锐角。x为分离比&#xff0c;必须大于1。注上述公式适合一切圆锥曲线。如果焦点内分(指的是焦点在所截线段上…

LSGO软件技术团队对外技术交流

LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为数据分析与计算机视觉。成立几年来为学校培养了一批优秀学生&a…

大型项目使用Automake/Autoconf完成编译配置

使用过开源C/C项目的同学们都知道&#xff0c;标准的编译过程已经变成了简单的三部曲&#xff1a;configure/make/make install, 使用起来很方便&#xff0c;不像平时自己写代码&#xff0c;要手写一堆复杂的Makefile&#xff0c;而且换个编译环境&#xff0c;Makefile还需要修…

java中数组的返回值是什么类型_Java数组也是一种数据类型

Java 的数组要求所有的数组元素具有相同的数据类型。因此&#xff0c;在一个数组中&#xff0c;数组元素的类型是唯一的&#xff0c;即一个数组里只能存储一种数据类型的数据&#xff0c;而不能存储多种数据类型的数据。因为 Java 语言是面向对象的语言&#xff0c;而类与类之间…

LSGO软件技术团队内部技术交流

LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为数据分析与计算机视觉。成立几年来为学校培养了一批优秀学生&a…

LSGO软件技术团队2015~2016学年第七周(1012~1018)总结

LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为数据分析与计算机视觉。成立几年来为学校培养了一批优秀学生&a…

idea查询类_Spring Security入门(三): 基于自定义数据库查询的认证实战

0 引言在笔者的上一篇文章中Spring Security入门(二)&#xff1a;基于内存的认证一文中有提到过Spring Security实现自定义数据库查询需要你实现UserDetailsService接口&#xff0c;并实现loadUserByUsername(String username)抽象方法。我们可以在UserDetailsService接口的实现…

python计算小数点后有几位_python的数字类型

python的数字类型分为三种&#xff0c;分别是整数int、 浮点数float 和 复数complex。数字是由数字字面值或内置函数与运算符的结果来创建的&#xff0c; 不带修饰的整数字面值会生成整数。包含小数点或幂运算符的数字字面值会生成浮点数。在数字字面值末尾加上 j 或 J 会生成虚…

Window服务的创建与删除

Windows服务应用程序是一种需要长期运行的应用程序&#xff0c;它对于服务器环境特别适合。它没有用户界面&#xff0c;并且也不会产生任何可视输出。任何用户消息都会被写进Windows事件日志。计算机启动时&#xff0c;服务会自动开始运行。它们不要用户一定登录才运行&#xf…

python颜色识别_颜色检测python

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https:blog.csdn.netu0121626…

LSGO软件技术团队与信息1402班开展真人CS活动

LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为数据分析与计算机视觉。成立几年来为学校培养了一批优秀学生&a…

写让别人能读懂的代码

随着软件行业的不断发展&#xff0c;历史遗留的程序越来越多&#xff0c;代码的维护成本越来越大&#xff0c;甚至大于开发成本。而新功能的开发又常常依赖于旧代码&#xff0c;阅读旧代码所花费的时间几乎要大于写新功能的代码。 我前几天看了一本书&#xff0c;书中有这么一句…

非阻IO与EWOULDBLOCK EAGAIN

非阻塞读写 默认 socket 是阻塞的&#xff0c;读写函数 read, readv, recv, recvfrom, recvmsg 以及 write, writev, send, sendto, sendmsg 都有可能会阻塞。可以将 socket 描述字设为非阻塞&#xff0c;这样&#xff0c;当 socket 描述字未就绪时&#xff0c;调用以上读写函…

一起学windows phone7开发(二十一.二 Map控件的简单使用)

1. 注册地图&#xff1a; 在使用地图之前必须先申请register key https://www.bingmapsportal.com/ 将申请到的key填到这个属性&#xff0c;地图才可以正常使用。 CredentialsProvider 属性&#xff1a;填写申请到的Register key。 2.设置中心点&#xff1a; <my:Map Height…