一、static關鍵字
1、靜態方法與實例化方法的區別:
a)訪問、調用方式:
靜態方法:調用前初始化
實例化方法:實例化對象時初始化
b)靜態字段:在程序編譯時就預先分配空間,訪問效率更快
實例化字段:執行到該代碼段時才分配空間,需要關鍵字 new
2、靜態調用關鍵字:static
靜態方法能訪問到其他靜態成員,不能訪問實例成員
例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 靜態方法
{
public class Test
{
private static int member;
//實例方法訪問靜態字段
public void Way(int num)
{
member = num;
}
//靜態方法訪問靜態字段
public static void Show()
{
Console.WriteLine("Value of member:"+member);
}
}
class Program
{
static void Main(string[] args)
{
Test test = new Test();
//對象調用實例方法
test.Way(40);
Test.Show();
}
}
}
3、靜態類:若類上加上static 關鍵字,則該類中的成員必須為靜態成員,且不能繼承靜態類
二、方法重載
1、含義:在同一個類中,方法名相同,參數數據類型、個數或順序不同的方法
2、例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
public class Student
{
public void Show1(int num1, int num2)
{
Console.WriteLine("兩個整數相加為:{0}",num1+num2);
}
public void Show2(string sign1, string sign2)
{
Console.WriteLine("兩個字符串相加等於:{0}",sign1+sign2);
}
}
class Program
{
static void Main(string[] args)
{
Student student = new Student(); //得到Student類的對象
student.Show1(12,21);
student.Show2("Hello", "girl");
}
}
}
三、構造函數:與類名相同,初始化成員變量
1、特征:
a):無返回值
b):可重載
c):任何對象要創建成功必須先調用相應的構造函數再對屬性進行賦值
2、語法:
訪問修飾符 類名(參數列表)
{
//構造函數主體
}
3、默認構造函數
a)若類中沒有顯示定義構造函數,編譯器會自動提供一個隱式的默認的不帶參數的構造函數,當顯示的定義了構造函數時,編譯器則不會提供,若要使用默認的構造函數,則需顯示定義
例:Student 類中聲明兩個構造函數
public class Student
{
private int no;
private string name;
//定義一個帶int參數的構造函數
public Student(int num){ }
//定義一個帶string參數的構造函數
public Student(string name) { }
} 調用構造方法實例化對象
Student student = new Student(); //錯誤 沒有不帶參數的構造函數 需要在Student類中手動定義一個無參數的構造函數
public Student(){}4、帶參數的構造函數
例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 帶參數的構造函數
{
public class Program
{
public int num;
public string name;
//無參數的構造函數中初始化兩個字段
public Program()
{
num = 39;
name = "Shelly";
}
//帶int參數的構造函數
public Program(int id)
{
num = id;
name = "Shelly";
}
//帶string參數的構造函數
public Program(string sname)
{
num = 49;
name = sname;
}
public void Print()
{
Console.WriteLine("name={0},num={1}",name,num);
}
static void Main(string[] args)
{
//實例化對象
Program p1 = new Program();
p1.Print();
//int
Program p2 = new Program(29);
p2.Print();
//string
Program p3 = new Program("Hi");
p3.Print();
}
}
}
5、靜態構造函數:不需要訪問修飾符
例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 靜態構造函數
{
public class Test
{
//靜態字段
private static int num;
//靜態構造函數
static Test()
{
num = 10;
Console.WriteLine("num="+num);
}
static void Main(string[] args)
{
Test test = new Test();
}
}
}
6、析構函數
析構方法的重要內容:
1) 不帶參數
2) 每個類中有且只有一個
3) 不帶訪問修飾符
4) 與類名相同,以~作前綴
5) 不能在代碼中顯示調用析構方法,在垃圾收集過程中調用,垃圾器分析代碼,並確定在代碼中沒有任何途徑引用該對象
注意:若不需要就避免執行,只應釋放對象自己外部的資源,不應該訪問其他對象
例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 析構函數
{
public class ShowClass1
{
public ShowClass1()
{
Console.WriteLine("調用構造函數:ShowClass1");
}
~ShowClass1()
{
Console.WriteLine("調用析構函數:ShowClass1");
}
}
public class ShowClass2
{
public ShowClass2()
{
Console.WriteLine("調用構造函數:ShowClass2");
}
~ShowClass2()
{
Console.WriteLine("調用析構函數:ShowClass2");
}
public void test()
{
ShowClass1 sc1 = new ShowClass1();
ShowClass2 sc2 = new ShowClass2();
}
}
class Program
{
static void Main(string[] args)
{
//析構函數調用
Program pro = new Program();
pro.test();
Console.WriteLine();
}
//析構函數的實例化
public void test()
{
ShowClass1 sc1 = new ShowClass1();
ShowClass2 sc2 = new ShowClass2();
}
}
}
構造函數與析構函數不同點:
1)實例化:構造函數:創建類的每個新實例時調用一次
析構函數:在每個實例被銷毀前調用
2)靜態:構造函數:只調用一次,在類的任意靜態變量第一次被訪問之前,或在實例被創建之前
析構函數:不存在,只有實例才有析構函數
7、readonly關鍵字
1)、與const不同點:
字段初始化:readonly:可以在聲明字段時初始化,也可在構造函數中初始化
const:只能在聲明時初始化
字段狀態:readonly:可靜態頁可非靜態
const:總是靜態
2)、例:
public class Evaluation
{
public int x;
//聲明readonly字段
public readonly int y = 25; //在聲明時初始化值
public readonly int z;
public Evaluation(int x)
{
this.x = x;
//在構造函數中初始化值
z = 25;
Console.WriteLine("x={0},y={1},z={2}",x,y,z);
}
public Evaluation(int num1,int num2,int num3)
{
x = num1;
y = num2;
z = num3;
Console.WriteLine("x={0},y={1},z={2}", x, y, z);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
static void Main(string[] args)
{
//readonly關鍵字在聲明或構造函數中初始化
Evaluation show = new Evaluation(11,21,31);
Evaluation show2 = new Evaluation(22);
}
}
View Code
8、this關鍵字:在類中訪問自身成員,常用在索引器中
使用范圍:實例化構造函數、實例方法、屬性和索引的實力訪問器、用於區分類的成員和本地變量或參數、作為調用方法的實參
例:
public Round(double r)
{
this.r=r;//用於區分類成員和參數
}
9、索引器:對象的數組訪問器
a)使用范圍:在任何可以聲明屬性的地方都可聲明
b)語法:
訪問修飾符 數據類型 this [數據類型 標識符]
{
get{};
set{};
}
c)注意:僅有一個元素時,沒有必要使用索引器進行訪問,索引器專門針對於數組進行索引