namespace 靜態類
{
//靜態類就是用static 修飾的類
//靜態方法就是用static修飾的方法
//靜態類是無法被繼承的
//實例類中可以包含靜態成員和實例成員
static class StaticClass
{
//靜態類中不能出現實例字段
//private string name;
//靜態類中能包含靜態的字段
private static string name;
//靜態類中不能出現實例方法
//public int Add(int num1,int num2)
//{
// return num1 + num2;
//}
public static int number;
public static string Name
{
get
{
return name;
}
set
{
name = value;
}
}
//靜態類中不能有實例構造方法
//public StaticClass()
//{
//}
//靜態類中不能出現訪問修飾符
//靜態類雖然不能被實例化 但是靜態構造方法也能被調用
//靜態構造函數無訪問修飾符、無參數,只有一個 static 標誌。
//靜態構造函數不可被直接調用,當創建類實例或引用任何靜態成員之前,靜態構造函數被自動執行,並且在某次運行期間只執行一次。
//靜態構造函數最多隻運行一次。
//靜態構造函數不可以被繼承。 所有的構造函數都不可以被繼承
static StaticClass()
{
Console.WriteLine("***");
}
//靜態類中只能包含靜態的方法
public static int Add(int num1,int num2)
{
return num1 + num2;
}
public static void NumberCreate()
{
number++;
}
}
}
class StaticClass01
{
//屬於實例 調用的時候人爲調用
public StaticClass01()
{
Console.WriteLine("實例構造方法");
}
//屬於類 因爲調用時候是被系統調用
static StaticClass01()
{
Console.WriteLine("靜態構造方法");
}
public static void Test()
{
Console.WriteLine("++++++++++++++");
}
}
class Program
{
//如果類中包含用來開始執行的 Main 方法,則該類的靜態構造函數將在調用 Main 方法之前執行。
//如果類中的靜態字段帶有初始化,則靜態字段的初始化語句將在靜態構造函數之前運行。
//一個類只能有一個靜態構造函數。
static int num = 200;
static Program()
{
num = 12000;
}
static void Main(string[] args)
{
//靜態類不能作爲一種自定義的類型
//靜態類不能被實例化
//StaticClass.Add(1,1);
//Console.WriteLine(num);
//Test01();
//Test02();
//通過類名.方法名調用靜態方法的時候會默認的調用一次靜態構造方法
StaticClass01.Test();
//一個類中既含有靜態構造方法 也含有實例構造方法 在創建實例的時候 會首先調用一次靜態構造方法再調用一次實例構造方法
StaticClass01 sc = new StaticClass01();
}
static void Test01()
{
StaticClass.NumberCreate();
Console.WriteLine(StaticClass.number);
}
static void Test02()
{
StaticClass.NumberCreate();
Console.WriteLine(StaticClass.number);
}
}