靜態、非靜態
先來看一段代碼來區分靜態與非靜態:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 靜態和非靜態的區別 { /** * 非靜態類 * 既可以定義靜態字段、靜態屬性、靜態方法。 * 也可以定義非靜態(實例成員)字段、非靜態(實例成員)屬性、非靜態(實例成員)靜態方法。 **/ //非靜態類 public class Person1 { //實例成員(非靜態) private int _id; //實例屬性(非靜態) public int ID { get { return _id; } set { _id = value; } } //實例方法(非靜態) public void Showinfo() { } /*--------------------------------------------------------------------*/ //靜態字段 private static string _name; //靜態屬性 public static string Name { get { return _name; } set { _name = value; } } //靜態方法 public static void Sho() { } } }
可以看出靜態與非靜態的區別在於 關鍵字 : static
靜態和非靜態的區別:
1)、在非靜態類中,既可以有實例成員,也可以有靜態成員。
2)、在調用實例成員的時候,需要使用對象名.實例成員;
在調用靜態成員的時候,需要使用類名.靜態成員名;
3)、非靜態類中:既可以定義靜態字段、靜態屬性、靜態方法,也可以定義非靜態(實例成員)字段、非靜態(實例成員)屬性、非靜態(實例成員)方法。
現在來看一個靜態與非靜態的小案例:
static void Main(string[] args) { //調用實例成員 Person p = new Person(); //非靜態方法 p.M1(); //靜態方法 Person.M2(); Console.WriteLine(); Console.ReadKey(); } public class Person { private static string _name; public static string Name { get { return Person._name; } set { Person._name = value; } } private char _gender; public char Gender { get { return _gender; } set { _gender = value; } } public void M1() { Console.WriteLine("我是非靜態的方法"); } public static void M2() { Console.WriteLine("我是一個靜態方法"); } }
運行結果:
總結:
靜態成員必須使用類名去調用,而實例成員使用對象名調用。
靜態函數中,只能訪問靜態成員,不允許訪問實例成員。
實例函數中,既可以使用靜態成員,也可以使用實例成員。
靜態類中只允許有靜態成員,不允許出現實例成員。
使用:
1)、如果你想要你的類當做一個"工具類"去使用,這個時候可以考慮將類寫成靜態的。
2)、靜態類在整個項目中資源共享。只有在程序全部結束之後,靜態類才會釋放資源。
本篇就到這裡了,最後打個小廣告:QQ群: .NET 一步步一幕幕 群號:590170361 (加群備注:博客園看到的)