this关键字的含义


Posted in 面试题 onApril 08, 2015
this是一个保留字,仅限于构造函数和方法成员中使用
在类的构造函数中出现表示对正在构造的对象本身的引用,在类的方法中出现表示对调用该方法的对象的引用,在结构的构造上函数中出现表示对正在构造的结构的引用,在结构的方法中出现表示对调用该方法的结果的引用
this保留字不能用于静态成员的实现里,因为这时对象或结构并未实例化
在 C# 系统中,this 实际上是一个常量,所以不能使用 this++ 这样的运算
this保留字一般用于限定同名的隐藏成员、将对象本身做为参数、声明索引访问器、判断传入参数的对象是否为本身
示例:
using System;
using System.Collections.Generic;
using System.Text;
namespace Example10
{
class Class1
{
private double c;
private string value;
public double C
{
get
{
return c;
}
}
public Class1(double c)
{
//限定同名的隐藏成员
this.c = c;
}
public Class1(Class1 value)
{
//用对象本身实例化自己没有意义
if (this != value)
{
c = value.C;
}
}
public override string ToString()
{
//将对象本身做为参数
return string.Format(“{0} Celsius = {1} Fahrenheit”, c, UnitTransClass.C2F(this));
}
//由于好奇,在这做了一个效率测试,想看看到底哪种方式访问成员变量更快,结论:区别不大。。。
public string Test1()
{
long vTickCount = Environment.TickCount;
for (int i = 0; i this.value = i.ToString();
return string.Format(“Have this.: {0} MSEL”, Environment.TickCount – vTickCount);
}
public string Test2()
{
long vTickCount = Environment.TickCount;
for (int i = 0; i value = i.ToString();
return string.Format(“Don’t have this.: {0} MSEL”, Environment.TickCount – vTickCount);
}

}

class UnitTransClass

{

public static double C2F(Class1 value)

{

//摄氏到华氏的转换公式

return 1.8 * value.C + 32;

}

}

class Program

{

static void Main(string[] args)

{

Class1 tmpObj = new Class1(37.5);

Console.WriteLine(tmpObj);

Console.WriteLine(tmpObj.Test1());

Console.WriteLine(tmpObj.Test2());
Console.ReadLine();
}
}
}
结果:
37.5 Celsius = 99.5 Fahrenheit
Have this.: 4375 MSEL
Don’t have this.: 4406 MSEL

Tags in this post...

面试题 相关文章推荐
简单说说tomcat的配置
May 28 面试题
我能否用void** 指针作为参数, 使函数按引用接受一般指针
Feb 16 面试题
函数指针的定义是什么
Aug 14 面试题
JAVA和C++区别都有哪些
Mar 30 面试题
类成员函数的重载、覆盖和隐藏区别
Jan 27 面试题
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
Sep 29 面试题
下列程序在32位linux或unix中的结果是什么
Jan 26 面试题
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
Mar 23 面试题
String s = new String(“xyz”);创建了几个String Object?
Aug 05 面试题
Java如何支持I18N?
Oct 31 面试题
J2EE模式面试题
Oct 11 面试题
Ruby如何实现动态方法调用
Nov 18 面试题
Can a struct inherit from another class? (结构体能继承类吗)
Jul 22 #面试题
.net C#面试题
Aug 28 #面试题
可以使用抽象函数重写基类中的虚函数吗
Jun 02 #面试题
如何选择使用结构还是类
May 30 #面试题
C#面试问题
Jul 29 #面试题
密封类可以有虚函数吗
Aug 11 #面试题
说出你对remoting 和webservice的理解和应用
Jun 08 #面试题
You might like
php5数字型字符串加解密代码
2008/04/24 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
php修改数组键名的方法示例
2017/04/15 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
JavaScript实现99乘法表及隔行变色实例代码
2016/02/24 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
js实现二级导航功能
2017/03/03 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
Python第三方库的安装方法总结
2016/06/06 Python
利用python如何处理nc数据详解
2018/05/23 Python
python 对key为时间的dict排序方法
2018/10/17 Python
对Python3 序列解包详解
2019/02/16 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
高中运动会广播稿
2014/09/16 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript