.NET基础之this关键字
1.限定类似名称隐藏的成员
- public Employee(string name, string alias)
- {
- // Use this to qualify the fields, name and alias:
- this.name = name;
- this.alias = alias;
- }
2.将对象作为参数传递给方法
- CalcTax(this);
3.声明索引器
静态成员函数,因为它们存在于类级别且不属于对象,不具有 this
指针。 在静态方法中引用 this
是错误的。
- public int this[int param]
- {
- get { return array[param]; }
- set { array[param] = value; }
- }
4.实现扩展的方法
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。对于用 C#编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法没有明显区别。
扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。 仅当你使用 using
指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。
扩展方法必须在非泛型静态类中定义。
如果扩展方法与该类型中定义的方法具有相同的签名,则扩展方法永远不会被调用。
- namespace ExtensionMethods
- {
- public static class MyExtensions
- {
- public static int WordCount(this String str)
- {
- return str.Split(new char[] { ' ', '.', '?' },
- StringSplitOptions.RemoveEmptyEntries).Length;
- }
- }
- }
可使用 WordCount 指令将 using 扩展方法置于范围中;
- using ExtensionMethods;
而且,可以使用以下语法从应用程序中调用该扩展方法:
- string s = "Hello Extension Methods";
- int i = s.WordCount();
5.使用扩展方法扩展类或接口
可以使用扩展方法来扩展类或接口,但不能重写扩展方法。 与接口或类方法具有相同名称和签名的扩展方法永远不会被调用。 编译时,扩展方法的优先级总是比类型本身中定义的实例方法低。换句话说,如果某个类型具有一个名为 Process(int i)
的方法,而你有一个具有相同签名的扩展方法,则编译器总是绑定到该实例方法。 当编译器遇到方法调用时,它首先在该类型的实例方法中寻找匹配的方法。 如果未找到任何匹配方法,编译器将搜索为该类型定义的任何扩展方法,并且绑定到它找到的第一个扩展方法。
定义接口:
- public interface IMyInterface
- {
- void MethodB();
- }
定义扩展方法:
- public static class ExtensionInterface
- {
- public static void MethodA(this IMyInterface myInterface,int i)
- {
- Console.WriteLine
- ("Extension.MethodA(this IMyInterface myInterface, int i)");
- }
- public static void MethodA(this IMyInterface myInterface, string s)
- {
- Console.WriteLine
- ("Extension.MethodA(this IMyInterface myInterface, string s)");
- }
- // This method is never called in ExtensionMethodsDemo1, because each
- // of the three classes A, B, and C implements a method named MethodB
- // that has a matching signature.
- public static void MethodB(this IMyInterface myInterface)
- {
- Console.WriteLine
- ("Extension.MethodB(this IMyInterface myInterface)");
- }
- }
实现接口:
- class A : IMyInterface
- {
- public void MethodB() { Console.WriteLine("A.MethodB()"); }
- }
- class B : IMyInterface
- {
- public void MethodB() { Console.WriteLine("B.MethodB()"); }
- public void MethodA(int i) { Console.WriteLine("B.MethodA(int i)"); }
- }
- class C : IMyInterface
- {
- public void MethodB() { Console.WriteLine("C.MethodB()"); }
- public void MethodA(object obj)
- {
- Console.WriteLine("C.MethodA(object obj)");
- }
- }
测试接口扩展:
- static void Main(string[] args)
- {
- // Declare an instance of class A, class B, and class C.
- A a = new A();
- B b = new B();
- C c = new C();
- // For a, b, and c, call the following methods:
- // -- MethodA with an int argument
- // -- MethodA with a string argument
- // -- MethodB with no argument.
- // A contains no MethodA, so each call to MethodA resolves to
- // the extension method that has a matching signature.
- a.MethodA(); // Extension.MethodA(IMyInterface, int)
- a.MethodA("hello"); // Extension.MethodA(IMyInterface, string)
- // A has a method that matches the signature of the following call
- // to MethodB.
- a.MethodB(); // A.MethodB()
- // B has methods that match the signatures of the following
- // method calls.
- b.MethodA(); // B.MethodA(int)
- b.MethodB(); // B.MethodB()
- // B has no matching method for the following call, but
- // class Extension does.
- b.MethodA("hello"); // Extension.MethodA(IMyInterface, string)
- // C contains an instance method that matches each of the following
- // method calls.
- c.MethodA(); // C.MethodA(object)
- c.MethodA("hello"); // C.MethodA(object)
- c.MethodB(); // C.MethodB()
- Console.ReadLine();
- }
6.转自
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/extension-methods
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/this
.NET基础之this关键字的更多相关文章
- Java SE 基础:常用关键字
Java SE 基础:常用关键字 常用关键字表
- Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)
Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...
- JAVA_SE基础——6.标识符&关键字
学会写helloworld之后, 我们就开始来认识标识符&关键字 一.标识符 标识符是指可被用来为类.变量或方法等命名的字符序列,换言之,标识符就是用户自定义的名称来标识类.变量或方法等.更 ...
- Java基础-标识符与关键字
Java基础-标识符与关键字 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是标识符 标识符就是程序员在编写程序时,给类,变量,方法等起的名字. 二.标识符的命名规则 1& ...
- java学习第02天(语言基础组成:关键字、标识符、注释、常量和变量)
Java语言基础组成 1. 关键字 就是指的一些单词,这些单词被赋予了特殊的java含义,就不再叫单词了. 例如: class Demo{ public static void main(String ...
- Java编程基础——标识符和关键字
Java编程基础——标识符和关键字 摘要:本文主要介绍标识符和关键字. 标识符 是什么 Java语言中,为各种变量.方法.类和包等起的名字,统统称之为Java标识符. 命名规则 ◆ 应以字母.下划线. ...
- Java基础语法(1)-关键字与保留字
title: Java基础语法(1)-关键字与保留字 blog: CSDN data: Java学习路线及视频 1.关键字 关键字(keyword)的定义和特点 定义:被Java语言赋予了特殊含义,用 ...
- java多线程基础(synchronize关键字)
[toc] 基础知识 ---- 线程:进程(process)就是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元. 线程:进程中所包含的一个或多个执行单元称为线程(threa ...
- Java基础系列--static关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8477914.html 一.概述 static关键字是Java诸多关键字中较常使用的一个,从 ...
- -1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义
Java语言基础组成 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 关键字 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 用于定义数据类型的关键字 class ...
随机推荐
- 在ServiceModel客户端配置部分中,找不到引用协定“”的默认终结点元素
鄙人自己写了一个读取文件的ASP.NET服务,在Silverlight工程中添加服务引用(名字为FileIOService)后,出现了如上的错误. 出错原因:服务是在项目B中调用的,但是主项目是A,所 ...
- 基于DSP的IS95正向业务信道模块设计
**定时20ms循环处理话音数据包*** *伪指令不占空间不影响执行速度,只是定义和描述但对汇编链接有重要指示作用 ********************************* .title & ...
- SSH免费登录
SSH免费登录很简单,如果有用过git的就更简单了 只需要一下两步操作就OK: 1.生成公钥和私钥,在linx上生成公钥和私钥,执行:ssh-keygen 2.执行ssh-copy-id +ip 例如 ...
- 利用PHP连接数据库——实现用户数据的增删改查的整体操作实例
main页面(主页面) <table width="100%" border="1" cellpadding="0" cellspac ...
- [C++]2-5 分数化小数
/* 分数化小数 输入正整数a,b,c,输出a/b的小数形式.精确到小数点后C位.a,b<=10^6,c<=10^6. 输入包含多组数据,结束标记为a=b=c=0 样例输入: 1 6 4 ...
- 用PHP来获取access_token
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".A ...
- jmeter(五)几种不同的content-type方式
今天我们来讲3种常见的content-type方式,及jmeter应用时信息头和传参方式的不同: 参照博客http://www.cnblogs.com/imyalost/p/6726795.html ...
- bash 文件名操作 常用方法
参考链接: http://www.jb51.net/article/51592.htm 查找文件不获取路径: find $1 -name '*.bin' -exec basename {} \;
- Python 13 简单项目-堡垒机
本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功 ...
- mysql 查询优化 ~ 优化基础补充
一 简介:此文章是对于 sql通用基础的补充说明 二 虚拟列: mysql虚拟列是mysql5.7的新特性,对于函数计算形成的结果可作为虚拟列,并可以对虚拟列添加索引,这样就能加速sql的运行,不过有 ...