C#容易被忽视的知识点(四)

19、扩展类

  例如想给某个类添加一个新方法,但由于某些原因,不能直接修改类的源代码,可以通过扩展类的方法实现。

  具体例子如下:

  假设有个类Show

 1     public class Show
 2     {
 3         public void MethodOne()
 4         {
 5             Console.WriteLine("MethodOne");
 6         }
 7     }
 8
 9     //扩展类
10     public static class ShowExtension
11     {
12         public static void MethodTwo(this Show s)  //第一个参数是要扩展的类型,放在this关键字后面,编译器就知道这个方法是Show类型的一部分。
13         {
14              Console.WriteLine("MethodTwo");
15         }
16     }
17
18
19     class Program
20     {
21         static void Main()
22         {
23             Show s = new Show();
24             s.MethodOne();
25             s.MethodTwo();  //调用扩展类的方法时,第一个参数不用处理。虽然扩展方法是静态,也要使用标准的实例方法语法调用。
26             Console.Read();
27         }
28     }                

  注意:如果扩展方法与类中的某个方法重名,就不会调用扩展方法。类中已有的任何实例方法优先。



20、



C#容易被忽视的知识点(四)

时间: 2024-10-06 04:20:45

C#容易被忽视的知识点(四)的相关文章

ExtJS4.2 Grid知识点四:改变表格Grid行文字颜色,划过Grid行时文字变粗

在ExtJS4.2 Grid知识点一:改变表格Grid单元格文字颜色一文中讲解了如何改变单元格中文字颜色,接下来在本章学习如何改变Grid中整行文字的颜色,这样就不需要为每列单独定义renderer函数,显示结果如图片: 在线演示  /  示例代码 实现方式是在Grid中设置viewConfig属性的getRowClass函数,函数参数列表如下: record: 当前待渲染行数据Model,类型为:Ext.data.Model rowIndex: 当前待渲染行数,类型为:Number rowPa

C++之易混淆知识点四---虚函数与虚继承

C++面向对象中,虚函数与虚继承是两个完全不同的概念. 一.虚函数 C++程序中只要类中含有虚拟函数,编译程序都会为此类生成一个对应的虚拟函数跳转表(vtbl),该虚拟函数跳转表是一个又若干个虚拟函数体入口地址组成的一个线性表.派生类的虚拟函数跳转表的前半部分由父类的vtbl得出,但是里面的内容不一定相同,后半部分则对应着自己新定义的虚拟函数. class Employee { protected: char *Name; int Age; public: void changeAge(int

Object-C知识点 (四) 性能优化

#pragma mark - 性能优化 1. 行高一定要缓存 缓存行高是解决性能优化的最佳途径(除非刷新频率已经很高了,否则一定要缓存)2. 尽量减少计算,所有需要素材提前计算好3. 控件不要设置圆角半径,图片的拉伸要用代码去处理,减少CPU和GPU的消耗4. 不要动态创建控件,需要展示的控件,都要提前创建好,在展示的时候根据数据隐藏或显示5. cell中的层次越少越好,数量越少越好(实现更好理解的前提下尽可能少)6. 高级优化 离屏渲染 self.layer.drawsAsynchronous

C#容易被忽视的知识点(三)

13.静态构造函数 用途:用于初始化任何静态数据,或用于仅需执行一次的特定操作.在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数. 特征:1.这种构造函数只执行一次,即在代码引用类之前调用它. 2.静态构造函数没有访问修饰符,其他C#代码不能调用,在加载类时,由.NET运行库调用. 3.出于同样的原因,静态构造函数不能带任何参数. 4.一个类只能有一个静态构造函数. 5.只能访问类的静态成员,不能访问类的实例成员. 6.无参数的构造函数与静态构造函数可以在同一个类中同时定义,在加载

Python爬虫知识点四--scrapy框架

一.scrapy结构数据 解释: 1.名词解析: o??引擎(Scrapy Engine)o??调度器(Scheduler)o??下载器(Downloader)o??蜘蛛(Spiders)o??项目管道(Item Pipeline)o??下载器中间件(Downloader Middlewares)o??蜘蛛中间件(Spider Middlewares)o??调度中间件(Scheduler Middlewares) 2.具体解析 绿线是数据流向??从初始URL开始,Scheduler会将其交给Do

容易忽视的知识点

1. 在C语言中,主函数省略返回类型后的默认返回类型为int. main(){ }  //主函数返回类型默认为int 2. 主函数末尾没有写return 0;这条语句,编译器执行到末尾会自动加上这条返回语句.(只适用于主函数) 3. cout << endl;  <<在这里是 插入运算符,另外还可作为 按位左移运算符,这是运算符重载的例子,通过重载,一个运算符有不同的含义.而endl被称为 控制符. 4. C++中,可以把一条语句放在几行上.例如: int main(){ }   

python 基础知识点(四)保留最后 N 个元素

问题 在迭代操作或者其他操作的时候,怎样只保留最后有限几个元素的历史记录? 解决方案 保留有限历史记录正是 collections.deque 大显身手的时候.比如,下面的代码在多行上面做简单的文本匹配, 并返回匹配所在行的最后N行: from collections import deque def search(lines, pattern, history=5): previous_lines = deque(maxlen=history) for line in lines: if pa

学习项目总结的几个知识点

1.知识一jQuery.noConflict( [removeAll ] ) 解决版本冲突问题很多javascript库使用 $ 作为一个函数或者变量名,正如jquery做的一样.在jQuery下 $只是jQuery的一个别名,所以不使用 $所有功能都是有效的.如果我们需要同时使用jQuery和其他javascript库,我们可以使用 $.noConflict()把 $的控制权交给其他库.旧引用的$ 被保存在jQuery的初始化; noConflict() 简单的恢复它们.如果由于某种原因,加载

Python自动化开发第一周知识点

知识点一:变量 1.变量名可以包括字母.数字.下划线,但是数字不能做为开头.例如:name1是合法变量名,而1name就不可以. 2.系统关键字不能做变量名使用 3.Python推荐使用XX_XX_XX形式起名 4.Python没有常量概念(如C++使用const定义一个常量) 5.Python表示常量用大写单词表示(但是实际上可以被修改) ------------------------------------------------------------------------------