返回首页


目录介绍它是如何工作NBSP?;var和细节自动实现的属性 = - =活动限制有关Articlesnbsp; 参考文献
源代码Demonbsp;{A} introductionnbsp;
在C#中,有许多功能,如来声明变量VAR,自动实现属性和多,这使得程序员的生活更轻松。另一方面,这种抽象创建有点混乱,如它是如何工作,如何网络implementednbsp;,那些东西innbsp的幕后。在这篇文章中,我会尝试找出这些东西,例如一些,VAR,Auto-Implementednbsp的,性能和= - =语法在Events.nbsp使用;它是如何工作?
在下面的讨论中,我们将看到如何VAR,自动实现的属性和=和 - =活动工作var和细节在C#中,这是可能的几种方法,隐式类型声明,使用var关键字声明的变量是其中之一。例如,它可以使用var totalSalary = 0,而不是INT totalSalary = 0;正如的MSDN 建议var是强类型的,但编译器决定的类型。探索多一点,我创建了一个小班,

namespace TestHarness

{

    public class VarExplorer

    {

        public Book ExploreVar()

        {

            var myBook = new Book() { Name = "What is out there?" };

            myBook.Name = "What is out there?";

            return myBook;

        }

    }

    public class Book

    {

        public string Name { get; set; }

    }

}

上面的类是不是做多,而初始化类型的书,其中包含名为ExplorerVar方法的一个实例。此方法具有变量使用var声明。在设计时或编码或同时在IDE中写代码,鼠标悬停上面的关键字var,那么编译器将确定变量myBook类型。请看看下面的图片,

{S0的}

图:VAR在设计时所以很显然,编译器在设计时确定的类型。另一个问题是在运行时发生了什么?要进行测试,我编译TestHarness项目,抢进净反射程序的bin文件夹中的TestHarness.exe,帮助NET Reflector中的代码,我发现ExploreVar方法如下,NBSP。;{C}上面的代码中清楚地表明,编译器取代适当的类型var关键字,同时建设项目为EXE。从上面的讨论,很清楚如何在C#中的VAR工作。自动实现的属性在C#中类的声明是很容易的,我们使用以下语法声明一个类,
public class Book 

{

       private string name;

       public string Name  

       {

            get {

                return name;

            }

            set {

                name = value;

            }

       }

}

它是非常简单的,但它是从C#3.0更容易。我们可以声明如下Book类,{体C3}现在的问题是用来声明一个类,语法之间的区别是什么。在现实中有没有除了编译器为我们做的所有工作。有点阶级背景,以不同的方式封装的概念已实施。 Book类首先声明,封装,通过引进这实际上相当于get和set方法的属性。所以这是不可能的,除非有一个公共的属性或get / set方法直接访问类的私有成员。现在的宣言书的第二个语法,编译器正在做这一切都代表一个程序员封装。当编译本书的第二版。使用NET Reflector中,编译器本身生成get和set方法和Name属性声明一个变量名从上面的讨论清楚,编译器手柄自动实现的属性。在运行时的调查多一点,我创建了下面的代码片段,以测试在运行时自动实现属性的东西,{C5的}在上面的类,ExploreMembers方法将探讨Person对象和ExplorePrivateFields的所有成员将探讨所有的私人领域,包括他们的Person对象的价值。如果我们运行ExplorePrivateFields方法,然后我们可以看到它会显示,{S}图:自动实现的性能测试结果。上面的输出,如果现在比较下面与人的实例代码,{5233}很显然,C#的商店名称和在runtime.nbsp职业属性值; = - =活动已经从事件的定义{A3的} NBSP的事件在C#是一类这一类的客户提供通知,当一些有趣的事情发生了一个对象。这次讨论的主要观点是,讨论一下,=或 - =的语法和它是如何涉及到的事件和委托,也它是如何工作的?实际上,编译器翻译= - =进入添加或删除通俗地说方法。因此,测试的概念,我创建了小班(这是做几乎没有),{C7-}因此,上面的类名为类型的LogHandler日志委托名称的LogHandler和事件。这个类的消费是如下,{C8的}因此,从以上的消费阶层,我们可以看到几个,如Logger1,Logger2方法,Logger3已添加到日志的Logit对象。现在的问题是,这些方法的信息储存或它是如何工作的,而使用=或 - =语法。要回答这个问题需要得到帮助。NET Reflector中。当我们反映的代码,我们可以看到下面的代码编译器生成的=或 - =
public class LogIt

{

    // Nested Types

    public delegate void LogHandler(string message);

    // Fields

    private LogHandler Log;

    // Events

    public event LogHandler Log

    {

        add

        {

            LogHandler handler2;

            LogHandler log = this.Log;

            do

            {

                handler2 = log;

                LogHandler handler3 = (LogHandler) Delegate.Combine(handler2, value);

                log = Interlocked.CompareExchange<loghandler>(ref this.Log, handler3, handler2);

            }

            while (log != handler2);

        }

        remove

        {

            LogHandler handler2;

            LogHandler log = this.Log;

            do

            {

                handler2 = log;

                LogHandler handler3 = (LogHandler) Delegate.Remove(handler2, value);

                log = Interlocked.CompareExchange<loghandler>(ref this.Log, handler3, handler2);

            }

            while (log != handler2);

        }

    }

    // Methods

    public Delegate[] GetList()

    {

        return this.Log.GetInvocationList();

    }

}

</loghandler></loghandler>
有两个新的东西,这是添加和删除,需要探索,现在加挡,并添加和删除的作品,一行代码给我们所有的线索,这是,{C10的}如果我们多一点挖Combine方法,我们会发现类似下面的东西,{C11的}代码块是从Delegate类和方法被称为Combine方法MulticastDelegate类定义也CombineImpl。MulticastDelegate拥有两个变量{C12的}
这_invocationList持有=语法指定使用的所有方法签名的主要对象。从下面的图片我们可以看到如何_ invocationList用来存储所有的方法签名的方法指针(IntPtr的)
{S2的}图:_innvocationList

{S3的的MulticastDelegate classnbsp;}穆罕默德一个拉赫曼

回答

评论会员:留言自动删除 时间:2012/02/06
米赞・拉赫曼
评论会员:游客 时间:2012/02/06
文​​章非常重要的imgsrc=http://www.orcode.com/img/ico/smiley_smile.gif的:穆罕默德一个拉赫曼:非常感谢您imgsrc=http://www.orcode.com/img/ico/smiley_smile.gif的
njdnjdnjdnjdnjd
评论会员:游客 时间:2012/02/06
谢谢你:穆罕默德一个拉赫曼:非常感谢您imgsrc=http://www.orcode.com/img/ico/smiley_smile.gif的
sudhansu_k123:很好的文章,很好的解释|
{A4纸}
|穆罕默德一个拉赫曼:谢谢
|大rumpa_kazol
评论会员:游客 时间:2012/02/06
:穆罕默德一个拉赫曼
谢谢你
评论会员:rumpa_kazol 时间:2012/02/06
是一个良好的阅读
评论会员:穆罕默德一个拉赫曼 时间:2012/02/06
。非常感谢您
评论会员:游客 时间:2012/02/06
Sharmin123:这是一个很好的努力
穆罕默德一个拉赫曼:非常感谢您
:
| Sazalsiddiqui
评论会员:的尼斯文章 时间:2012/02/06
穆罕默德一个拉赫曼
评论会员:游客 时间:2012/02/06
非常感谢您|AbinashBishoyi
大文章
:穆罕默德一个拉赫曼:非常感谢您{BR。 }
评论会员:feeza0125 时间:2012/02/06
去我的第一次投票和其5 ..的YAY
尼斯的文章{S8的}
评论会员:穆罕默德一个拉赫曼 时间:2012/02/06
。谢谢
评论会员:GanesanSenthilvel 时间:2012/02/06
漂亮ç#数据结构的内部
评论会员:穆罕默德一个拉赫曼 时间:2012/02/06
谢谢你{中四至中}
评论会员:游客 时间:2012/02/06
kasunt:跟上伟大的工作,{A5的}:穆罕默德一个拉赫曼:谢谢imgsrc=http://www.orcode.com/img/ico/smiley_smile.gif的:穆罕默德一个拉赫曼
很好。保持