C#基础加强(2)之密闭类、静态类及扩展方法
密闭类
简介
密闭类是被 sealed 关键字修饰的类,密闭类不能有子类。一般只有系统的一些基本类声明为密闭类,例如 String 类。
相关面试题
是否可以编写一个类继承自 String 类?
我们可以查看 String 类的声明,如下:
[ComVisible(true)] [__DynamicallyInvokable] [Serializable] public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable, IComparable<string>, IEnumerable<char>, IEquatable<string>
可以看到,String 类就是一个密闭类,所以它不可以被继承。
静态类
简介
使用 static 关键字修饰的类就是静态类,静态类不能被实例化、不能被继承且只能定义 static 成员。
补充
静态类不能被继承的原因是编译器会将静态类识别为一个密闭类,如下:

扩展方法
简介
扩展方法是 C#3.0 的新特性,可以使用它在一个静态类中为另一个类定义方法。
案例
给 String 类扩展一个 IsEmail 方法,用来判断字符串中是否存在 "@" 字符。
public static class StringExt
{
/**
* 扩展方法定义
* str 参数代指调用该方法的对象
*/
public static bool IsEmail(this String str)
{
return str.Contains("@");
}
}
[TestFixture]
public class Tests
{
[Test]
public void Test()
{
string email = "zze@foxmail.com";
// 使用扩展方法
var isEmail = email.IsEmail();
Console.WriteLine(isEmail);
// true
}
}
第一个参数是被扩展类型,需使用 this 修饰。
C#基础加强(2)之密闭类、静态类及扩展方法的更多相关文章
- 第二篇 .NET高级技术之密闭类和静态类及扩展方法
1.密闭类是修饰为sealed的类, sealed不能有子类.一般只有系统中的一些基本类声明为sealed.面试题:是否可以编写一个类继承自String类? 答:不能,因为string被声明为了sea ...
- ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...
- c# 扩展方法奇思妙用基础篇八:Distinct 扩展(转载)
转载地址:http://www.cnblogs.com/ldp615/archive/2011/08/01/distinct-entension.html 刚看了篇文章 <Linq的Distin ...
- c# 扩展方法奇思妙用基础篇八:Distinct 扩展
刚看了篇文章 <Linq的Distinct太不给力了>,文中给出了一个解决办法,略显复杂. 试想如果能写成下面的样子,是不是更简单优雅 var p1 = products.Distinct ...
- C#中的扩展方法(向已有类添加方法,但无需创建新的派生类型)
C#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...
- JavaScript学习总结(十四)——JavaScript编写类的扩展方法
在JavaScript中可以使用类的prototype属性来扩展类的属性和方法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)
当我们知道一个类的对象,或者知道一个类的路径,或者指导这个类的名称的时候我们可以获取到这个类的类对象 当我们仅仅知道一个类的类对象的时候我们依然无法操作这个类,因为我们不知道这个类的属性,类的方法.那 ...
- 【Cocos2d-Js基础教学(2)类的使用和面向对象】
类的使用和面向对象 大家都知道在cocos2d-x 底层是C++编写的,那么就有类的概念和继承机制. 但是在JS中,是没有类这个概念的,没有提供类,没有C++的类继承机制. 那么JS是通过什么方式实现 ...
- 实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法
实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法 #import <Found ...
随机推荐
- Python装饰器用法
在Python中,装饰器一般用来修饰函数,实现公共功能,达到代码复用的目的.在函数定义前加上@xxxx,然后函数就注入了某些行为,很神奇!然而,这只是语法糖而已. 场景 假设,有一些工作函数,用来对数 ...
- 每天进步一点点——mysql——mysqlbinlog
一. 简单介绍 mysqlbinlog:用于查看server生成的二进制日志的工具. 二. 命令格式 mysqlbinlog 选项日志文件1 三. 经常使用參数 ...
- 关于 GET、POST、表单、Content-Type
关于 GET.POST.表单.Content-Type headers HTTP 的请求头,在这里也可以放参数,不论 GET 请求或 POST 请求都可以. GET 请求 GET 请求的参数都在 UR ...
- Python中的三元运算符
Python中的三元运算符 对于如下需求: if var1>1 : goal = "执行表达式1" else: goal = "执行表达式2" 1.在其他 ...
- uglifyjs 合并压缩 js, clean-css 合并压缩css
本文主要介绍如何通过CLI命令行(也就是终端或者cmd打开的那个shell窗口)实现 js和 css 的合并压缩. uglifyjs 合并压缩 js: 1.安装node 这一步就不多说了,下载node ...
- ubuntu14.04安装MATLAB R2017b步骤详解
转载:https://blog.csdn.net/qq_32892383/article/details/79670871 1. 前言最近由于项目原因,需要在ubuntu上安装MATLAB,在网上找了 ...
- Flume的监控参数
参考 flume的http监控参数说明 普通的flume启动命令 bin/flume-ng agent -c conf -f conf/flume-conf.properties -n agent - ...
- swoole推送信息一对一,一对多
服务端 $ws->on('message', function ($ws, $frame) { //echo "接收到的信息: {$frame->data}\n"; / ...
- Oracle 19C的下载和安装部署(图形安装和静默安装)
Oracle 19C的下载和安装部署(图形安装和静默安装) https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/ ...
- Mysql Window 解压版卸载
windows如何彻底卸载mysql 如何彻底删除mysql 1.首先在windows服务中将mysql服务删掉,使用命令 sc delete mysql 2.在控制面板中卸载掉mysql. 3.清理 ...