使用'这个'在构造函数中的关键字

有什么区别的B / W以下两个代码。 有什么用在构造函数中使用'这个'关键字。

例1:

public Product(string name){ this.Name = name; }

例2:

public Product(string name){ Name = name; }

我知道这指的是调用对象。 只是我不能抽到的区别?

可有人请解释?

--------------解决方案-------------

例1采用明确提及this 。 这是不是真的需要,因为在这种情况下,不会有歧义。 如果参数被称为Name代替,明确this将需要解决的模糊性。

它是在你提供的例子绝对是可选的。

主要是,它隐含告诉一个与工作的成员是当前类对象的一部分用户。

一的做法是,以区别于成员或场像以下参数:

public class Customer {
private string name;

public Customer(string name) {
this.name = name;
}
}

对于可读性的缘故,人们会把this在前面的name领域,使之清楚,值name参数被分配到这个类的name字段。

在这样的情况下,它是necessery,因为两者的构造参数和字段具有相同的名称。 否则,如果他们是不同的变量名称,则this关键字是可选的。

在这种情况下,没有差别。 较常见的原因是明确的是这样的:

public Product(string name){
this.name = name;
}

在这一点上, this是绝对必要的,否则这将是从参数本身(这将提出警告,IIRC)无操作任务。

在发射IL绝对没有区别条款。 这只是为了便于阅读。 当您使用this你是更加明确。

this.Name更明确的不仅仅是Name 。 使用this使得至于什么代码是干什么的更明显; 但在这种情况下,编译器将解释它们以相同的方式。

我不同意与其他在这里说,谁使用“这个”更加明确。 这是最绝对不是。 在你给的例子中,“名称”属性是因为它得到明确。 如果我们有另外的关键字,有超过字母“这个”它不会是更加明确。

Name

不比不明确

this.Name

这也没什么比下面废话少说明确

thisIsNotAKeyWordButItMeansThis.Name

这是一个风格问题。 像其他人所说的,没有在IL没什么区别。 就个人而言,我喜欢看this.访问类的成员,只要使用前缀。 事实上,默认StyleCop的规则需要它。 它只是讲清楚那里的成员是来自。

分类:C# 时间:2012-01-01 人气:0
本文关键词: C#
分享到:

相关文章

  • 在C#中扩展枚举 2012-01-01

    我想知道我是否可以延长枚举类型在C#来实现我的自定义Enum.GetValues​​(型),并调用它像Enum.GetMyCustomValues​​(类型) 我想实现这样的事情: public static bool IsFlagSet<T>(this T value, T flag) where T : Enum { return (value & flag) != (T)0; } 但它不能这样做......任何变通我能做什么? 干杯 --------------解决方案-----

  • PHP客户端和C#服务器 - 不沟通,由于超时 2012-01-01

    我是相当新的Socket编程,但这里不用什么. 我一直试图做一个C#服务器和PHP客户端之间的一些简单的TCP通信. 不过,我曾在让他们之间的连接没有运气. 我基本上经由PHP socket通信的Web浏览器发送一个桌面应用程序的消息. 不过,我不断收到超时错误. 我的代码如下: 我的C#代码服务器-它只是简单地聆听,并通知我,如果建立连接 static void Main(string[] args) { try { IPAddress localAddress = IPAddress.Par

  • C#如何获得元素的宽度 2012-01-01

    有没有一种方法,我可以做jQuery的的equivilant var myElementWidth = $('.class').width; 在C#和存储它作为一个变量,以备后用. 任何指针将受到欢迎. --------------解决方案------------- 正如一些评论指向,如果位置和大小的客户端,C#情况,服务器端代码永远不会知道一些特定元素的实际尺寸和位置. 但是,如果这是宽为Web应用程序非常重要,也许你可以设置客户端呈现一些异步操作页面只是在此之后的价值. 我要说的是,这样做的

  • 如何关闭*多显示*在C#? 2012-01-01

    有关于"如何关闭监视器在C#"的文章很多,但他们都关掉所有的监视器. 有没有关闭特定监视器任何可能的方式? --------------解决方案------------- 研究一点点导致我在这里: http://www.codeguru.com/forum/showthread.php?p=1011720#post1011720 你知道如何调用一个函数一样,在C#中? - 编辑 貌似这家伙所做的这一切为你: http://www.codeproject.com/KB/dotnet/Di

  • 如何包装无的WinForms的DataGridViewTextBoxCell(C#),空格或换行符长文本? 2012-01-01

    如何包装无空格或换行符长文本DataGridViewTextBoxCell的WinForms的(C#)? private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if ((e.ColumnIndex == 1) && (e.FormattedValue != null)) { SizeF sizeGraph = e.Graphics.MeasureString

  • 基于常数值强制C#编译器错误 2012-01-01

    我有一个C#类中定义的私有const int的. 我想编译失败与错误,如果这个INT模3的值!= 0,我怎样才能做到这一点? --------------解决方案------------- 蒂莫西·扈利几乎得到了它. 它应该是这样的: int compilerError = 1 / (MY_CONST % 3 == 0 ? 1 : 0); 虽然产生编译时错误的#ERROR预处理器指令,也没有办法为它基于对一个const值的存在. 只带编译符号的作品,如"DEBUG",为它的值不能进行分

  • 用C#模仿批处理文件 2012-01-01

    我有一个运行四个命令的批处理文件 vsinstr -coverage hello.exe vsperfcmd /start:coverage /output:run.coverage hello vsperfcmd /shutdown 如何使用C#来运行四个命令? --------------解决方案------------- 运行使用的Process.Start的命令. 例 使用覆盖Process.Start(string fileName, string arguments) Process

  • 无法在F#扩展运营商? 2012-01-01

    module FSharp= let Point2d (x,y)= Point2d(x,y) let Point3d (x,y,z)= Point3d(x,y,z) type NXOpen.Point3d with static member ( * ) (p:Point3d,t:float)= Point3d(pX*t,pY*t,pZ*t) static member ( * ) (t:float,p:Point3d)= Point3d(pX*t,pY*t,pZ*t) static membe

  • 如何通过C#中添加自定义的控制,我们的表格 2012-01-01

    我使用Visual Studio 2008(WPF / C#). 我创建了一个自定义的控制,并将其添加为我的项目的引用. 现在我想动态添加通过代码背后(C#),即自定义控件. 任何人都帮我出的这些. --------------解决方案------------- 这是,你可以通过一些谷歌上搜索发现动辄基本的东西. 不管怎么说参考http://arcanecode.com/2007/09/07/adding-wpf-controls-progrrammatically/这link..it 5可以帮

  • 什么办法让一个BITMAPV5HEADER在C#中的位图对象 2012-01-01

    有没有什么办法让一个BITMAPV5HEADER在C#中的位图对象? 或者只是得到了在他们的价值观? 我需要得到一些ColorSpace中的信息进行位图,并不能看到一个办法做到这一点在C#. --------------解决方案------------- 似乎没有成为一个简单的方法来做到这一点,但hackish的(也可能是非常错误的)方法是将读取原始数据,并将其转换为一个BITMAPV5HEADER结构. 结构体 [StructLayout(LayoutKind.Sequential)] pub

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.123 (s). 10 q(s)