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;首列必须为查找依据列 无法简单的多条件匹配 横向查找等等往往需要进行一些复杂操作的时候我们都需要修改…

基于C8051F040单片机的CAN总线测试模式研究

摘要&#xff1a;现场总线已成为数据总线领域中最为活跃的热点&#xff0c;CAN总线被公认为最有前途的现场总线之一&#xff0c;CAN总线节点的设计、调试是CAN总线通讯系统设计的重点。在此介绍了C8051F040单片机内部集成的CAN控制器&#xff0c;并基于C8051F040单片机设计了一…

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…

CAN总线技术在船舶监控系统的应用

AN(Controller Area Network),即控制局域网,是一种具有很高可靠性、支持分布式和实时控制的串行通信网络。CAN为多主方式工作,网络上任意节点均可在任意时刻主动地向网络上其它节点发送信息,而不分主从,且无需站地址等节点信息,通讯灵活。CAN协议模型结构只有3层,即只取OSI底层…

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管…

Some Notes About Design Pattern

针对接口编程而不是实现 优先使用对象组合&#xff0c;而不是类继承 封装变化点 使用重构到模式&#xff0c;而不是直接使用设计模式 设计模式是好的面向对象设计&#xff0c;所以只有掌握面向对象才能更好的理解和应用设计模式 单一职责原则&#xff1a;一个类应该只有一个引起…

M16C

R8C/M16C提供一系列预处理指令&#xff0c;能够很好的优化C代码。 本文以nc30编译器为例&#xff0c;谈谈#pragma的用法。 1)。与内存有关的命令 #pragma ROM 将一个变量放入ROM里面&#xff0c;比如&#xff1a; #pragma ROM aa int aa; #pragma BIT 位变量申明。表…

ASP+AJAX制作无刷新新闻评论系统01

传统&#xff1a;上半部分评论列表直接通过数据库查询语句读取并显示&#xff0c;每当提交新的评论时&#xff0c;先传递给处理页面&#xff0c;处理页面处理完毕后再返回index.asp这个页面&#xff0c;当然index.asp是重新加载获得新的评论。  Ajax:&#xff1a;首先列表页面…

修改Fiddler实用插件JsonViewer

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

百度的算法面试题

第一题&#xff1a; 某个公司举行一场羽毛球赛&#xff0c;有1001个人参加&#xff0c;现在为了评比出“最厉害的那个人”&#xff0c;进行淘汰赛&#xff0c;请问至少需要进行多少次比赛。 淘汰赛&#xff0c;一场淘汰一个人&#xff0c;自然就需要1000场&#xff0c;根本不…

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…

国外好的软件测试网站

慢慢补充 http://www.sqaforums.com/ubbthreads.php转载于:https://www.cnblogs.com/slaughter/archive/2010/10/12/1849020.html

大型项目使用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…

Makefile.am

一般格式 文件类型 书写格式 可执行文件 bin_PROGRAMES foo foo_SOURCES xxxx.c foo_LDADD foo_LDFLAGS foo_DEPENDENCIES 静态库 lib_LIBRARIES libfoo.a foo_a_SOURCES foo_a_LDADD foo_a_LIBADD foo_a_LDFALGS 头文件 include_HEADERS foo.h 数据文件 data_DATA …

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

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