靜態、非靜態
先來看一段代碼來區分靜態與非靜態:
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 (加群備注:博客園看到的)