using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; namespace OOP { public class OOPdemo { /* * static關鍵字 * 作用:可以修飾成員變數,修飾成員方法 * 需求:同一個類生成的物件們,共享此方法,一處修改,處處感知 * 規則: * 1.類名.變數名; * 2.類名.方法名() * 3.隨著類的載入而載入,優先於物件生成 * 4.靜態方法內部,只能夠訪問靜態成員變數,並不能夠訪問普通成員變數 * 5.普通方法方法內部,可以訪問靜態成員變數+普通成員變數 * --靜態類 * 規則 * 1.只允許加入靜態成員/屬性 * 2.只允許加入靜態成員方法 * 3.*例項化--->不允許使用 new 進行例項化生成。例項 * --sattic的記憶體原理 * -生命週期由類的產生而產生 * -也就是說,當第一次遇到需要呼叫的類時,static變數就會被載入到 靜態記憶體當中 作為一個共享的 */ #region statuic的欄位/屬性 /// <summary> /// 用於己錄當前一共生成過多少個物件 /// 因為static關鍵字,所以這個欄位被共享出了 /// </summary> static public int count; private int ID; public int id { get => ID; set => ID = value; } /// <summary> /// 構造方法,物件被建立的時候被呼叫 /// </summary> public OOPdemo() { count++; } #endregion } #region 靜態類的---工具類 /// <summary> /// 靜態類的---工具類 /// 特點 /// --在當前類中,沒有儲存欄位 /// --不需要也不允許new物件例項化 /// --內部的方法都為靜態方法 /// --所作的計算都依賴於外界傳入的引數,完成外界想讓靜態方法完成的任務 /// 在呼叫靜態類中的某個方法時,只需要類名.方法名 不需要例項化,因為他沒有欄位儲存資料 /// 且執行時依賴於外部傳進來的引數,則作為靜態方法使用 /// 設定為靜態類,可以防止他人new 本類的物件,從而規範開發行為 /// </summary> static class staticss { //給定一個陣列,要求返回這個陣列中的最大值和最小值,以及和以及平均數 /// <summary> /// 返回陣列中最大值 /// </summary> /// <param name="arr"></param> /// <returns></returns> public static int Max(int [] arr) { int a = 0; for (int i = 0; i < arr.Length; i++) { if (a>arr[i]) { a = arr[i]; } } return a; } /// <summary> /// 返回陣列中最新小的值 /// </summary> /// <param name="arr"></param> /// <returns></returns> public static int Min(int[] arr) { int a = 0; for (int i = 0; i < arr.Length; i++) { if (a < arr[i]) { a = arr[i]; } } return a; } /// <summary> /// 返回陣列中所有元素的和 /// </summary> /// <param name="arr"></param> /// <returns></returns> public static int Sum(int[] arr) { int a = 0; foreach (var item in arr) { a += item; } return a; } /// <summary> /// 返回陣列中所有元素1平均值 /// </summary> /// <param name="arr"></param> /// <returns></returns> public static int Avg(int[] arr) { int a = 0; foreach (var item in arr) { a += item; } return a/arr.Length; } } #endregion }