FROM P 144
Part1 靜態類
靜態類中所有成員都是靜態的。靜態類用於存放不受實例數據影響的數據和函數。靜態類的一個常見用途可能就是創建一個包含一組數學方法和值的數學庫。
關於靜態類需要了解的重要事情如下:
□類本身必須標記為static
□類的所有成員必須是靜態的
□類可以有一個靜態構造函數,但不能有實例構造函數,不能創建類的實例
□靜態類是隱式密封的,也就是說,不能繼承靜態類。
示例:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace review 8 { 9 static public class MyMath //類必須標記為靜態的 10 { 11 public static float PI = 3.14f; 12 public static bool IsOdd(int x) //成員必須是靜態的 13 { 14 return x % 2 == 1; 15 } 16 public static int Times2(int x) //成員必須是靜態的 17 { 18 return 2 * x; 19 } 20 } 21 class Program 22 { 23 static void Main(string[] args) 24 { 25 int val = 3; 26 Console.WriteLine("{0} is odd is {1}.", val, MyMath.IsOdd(val)); 27 Console.WriteLine("{0} * 2 = {1}.", val, MyMath.Times2(val)); 28 Console.Read(); 29 } 30 } 31 } 32 /* 33 * 輸出如下: 34 * 3 is odd is true. 35 * 3 * 2 = 6. 36 * */
Part2 擴展方法
迄今為止,每個方法都和聲明它的類關聯。擴展方法特性擴展了這個邊界,允許編寫的方法和聲明它的類之外的類關聯。
其要求有:
□聲明擴展方法的類必須聲明為static
□擴展方法本身必須聲明為static(實際上,根據上述靜態類的描述,靜態類不能有非靜態方法)
□擴展方法必須包含關鍵字this作為它的第一個參數類型,並在后面跟着它所擴展的類的名稱
其基本結構如下:(以聲明類 Mydata的擴展 average方法為例)
以下為一個具體示例,注意方法Average完全如同它是MyData的實例成員那樣調用。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace review 8 { 9 sealed class MyData 10 { 11 private double D1, D2, D3; 12 public MyData(double d1,double d2,double d3) 13 { 14 D1 = d1;D2 = d2;D3 = d3; 15 } 16 public double sum() { return D1 + D2 + D3; } 17 } 18 static class ExtendMyData 19 { 20 public static double Average(this MyData md) //聲明為靜態的,加上關鍵字和類型 21 { 22 return md.sum() / 3; 23 } 24 } 25 class Program 26 { 27 static void Main(string[] args) 28 { 29 MyData md = new MyData(3, 4, 5); 30 Console.WriteLine("Sum: {0}", md.sum()); 31 Console.WriteLine("Average: {0}", md.Average());//當作類的實例成員來調用 32 Console.Read(); 33 } 34 } 35 } 36 /* 37 * 輸出如下: 38 * Sum: 12 39 * Average: 4 40 * */