C# this保留字分析

开发 后端
这里介绍C# this保留字一般用于限定同名的隐藏成员、将对象本身做为参数、声明索引访问器、判断传入参数的对象是否为本身。

C#语言有很多值得学习的地方,这里我们主要介绍C# this保留字,包括介绍在结构的方法中出现表示对调用该方法的结果的引用等方面。

this 是一个保留字,仅限于构造函数和方法成员中使用;

在类的构造函数中出现表示对正在构造的对象本身的引用,在类的方法中出现表示对调用该方法的对象的引用,在结构的构造上函数中出现表示对正在构造的结构的引用,在结构的方法中出现表示对调用该方法的结果的引用;

C# this保留字不能用于静态成员的实现里,因为这时对象或结构并未实例化;

在 C# 系统中,this 实际上是一个常量,所以不能使用 this++ 这样的运算;

C# this保留字一般用于限定同名的隐藏成员、将对象本身做为参数、声明索引访问器、判断传入参数的对象是否为本身。

示例:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.    
  5. namespace Example10  
  6. {  
  7. class Class1  
  8. {  
  9. private double c;  
  10. private string value;  
  11.    
  12. public double C  
  13. {  
  14. get  
  15. {  
  16. return c;  
  17. }  
  18. }  
  19. public Class1(double c)  
  20. {  
  21. //限定同名的隐藏成员  
  22. this.c = c;  
  23. }  
  24. public Class1(Class1 value)  
  25. {  
  26. //用对象本身实例化自己没有意义  
  27. if (this != value)  
  28. {  
  29. c = value.C;  
  30. }  
  31. }  
  32. public override string ToString()  
  33. {  
  34. //将对象本身做为参数  
  35. return string.Format("{0} Celsius = {1} Fahrenheit", 
    c, UnitTransClass.C2F(this));  
  36. }  
  37.    
  38. //由于好奇,在这做了一个效率测试,想看看到底哪种方式访问成员变量更快,
    结论:区别不大。。。  
  39. public string Test1()  
  40. {  
  41. long vTickCount = Environment.TickCount;  
  42. for (int i = 0; i < 10000000; i++)  
  43. this.value = i.ToString();  
  44. return string.Format("Have this.: {0} MSEL", 
    Environment.TickCount - vTickCount);  
  45. }  
  46. public string Test2()  
  47. {  
  48. long vTickCount = Environment.TickCount;  
  49. for (int i = 0; i < 10000000; i++)  
  50. value = i.ToString();  
  51. return string.Format("Don't have this.: {0} MSEL", 
    Environment.TickCount - vTickCount);  
  52. }  
  53. }  
  54. class UnitTransClass  
  55. {  
  56. public static double C2F(Class1 value)  
  57. {  
  58. //摄氏到华氏的转换公式  
  59. return 1.8 * value.C + 32;  
  60. }  
  61. }  
  62. class Program  
  63. {  
  64. static void Main(string[] args)  
  65. {  
  66. Class1 tmpObj = new Class1(37.5);  
  67. Console.WriteLine(tmpObj);  
  68. Console.WriteLine(tmpObj.Test1());  
  69. Console.WriteLine(tmpObj.Test2());  
  70. Console.ReadLine();  
  71. }  
  72. }  

【编辑推荐】

  1. C#静态变量简单分析
  2. C# sealed修饰符学习笔记
  3. C# const和static readonly区别浅谈
  4. C#隐含类型局部变量浅析
  5. C#对象初始化器描述
责任编辑:佚名 来源: 博客园
相关推荐

2009-09-11 10:51:33

C#保留小数位

2009-09-01 09:16:57

C#使用SharpZi

2009-08-26 10:34:59

C# Hashtabl

2009-08-19 11:21:02

C# ListBox控

2009-08-26 16:46:06

C# ThreadSt

2009-08-27 15:34:38

C#命名空间

2009-08-27 18:05:54

C#索引功能

2009-08-26 16:26:37

C#迭代器模式

2009-08-27 18:02:22

C#事件处理

2009-09-01 17:32:04

C#版本控制

2009-08-31 18:24:26

编译C#文件

2009-08-26 18:00:07

C#内部类

2009-09-04 14:01:30

C#存储BLOB对象

2009-09-01 18:36:35

C#委托实例

2009-09-01 18:05:17

C#类型声明

2009-08-27 15:17:18

C# interfacinterface使用

2009-08-21 17:45:40

C#调用COM对象

2009-09-01 10:58:46

C#匿名类型对象

2009-09-18 10:45:31

C#数组操作

2012-10-31 17:37:48

点赞
收藏

51CTO技术栈公众号