密閉類是被 sealed 關鍵字修飾的類,密閉類不能有子類。通常只有系統的一些基本類聲明爲密閉類,例如 String 類。面試
是否能夠編寫一個類繼承自 String 類?this
咱們能夠查看 String 類的聲明,以下:spa
[ComVisible(true)] [__DynamicallyInvokable] [Serializable] public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable, IComparable<string>, IEnumerable<char>, IEquatable<string>
能夠看到,String 類就是一個密閉類,因此它不能夠被繼承。code
使用 static 關鍵字修飾的類就是靜態類,靜態類不能被實例化、不能被繼承且只能定義 static 成員。對象
靜態類不能被繼承的緣由是編譯器會將靜態類識別爲一個密閉類,以下:blog
擴展方法是 C#3.0 的新特性,可使用它在一個靜態類中爲另外一個類定義方法。繼承
給 String 類擴展一個 IsEmail 方法,用來判斷字符串中是否存在 "@" 字符。ip
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 修飾。字符串