密闭类
简介
密闭类是被 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
修饰。
评论区