2016.4.7
1、
呼叫類時將類檔案生成操作改為編譯,然後
using _73_ClassAndeObject.App_Code;
2、類型別的成員變數都被自動設定為一個恰當的預設值
bool類:false
數值類:0
string類:null
char類:\0
引用型別:null
3、訪問修飾符
public:公共訪問
private:私有訪問
protected:只有子類才能訪問,基類和外部程式碼都不能訪問
internal:不能在程式集外被任何型別訪問
protected internal:定義了一個物件的訪問被限制在當前程式集,或者當前程式集從定義它的類所派生的型別中
型別(類、介面、結構、列舉和委託)也可以帶訪問修符,但只能用public和internal
4、new例項化
類名 物件變數名=new 類名();
5、物件訪問:
MyClass class1 = new MyClass();
Response.Write(class1.add_x() + "<br/>");
類訪問:
Response.Write(MyClass.add_y() + "<br/>");
6、程式碼摺疊整理
#region name
#endregion
7、分佈類(partial class)使用場合
(1)處理大型專案時,可以將類拆分成幾個檔案,讓多位程式設計師同時進行工作,不會因為只有一個檔案造成彼此覆蓋。
(2)使用自動生成的原始檔時,無需重新建立原始檔即可將程式碼新增到類中。
8、解構函式
當某個類的例項被認為是不再有效,並符合析構條件時,呼叫該類的解構函式實現垃圾回收
解構函式,釋放非託管資源
/// </summary>
~SqlDb()
{
try
{
if (sqlcon != null)
sqlcon.Close();
}
catch{}
try
{
Dispose();
}
catch{}
}
9、使用靜態屬性可以直接通過類級別訪問
private static string companyName;//靜態欄位
public static string Company//靜態屬性
{
get { return companyName; }
set { companyName = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
Employee.Company = "Compay:";/
Response.Write(Employee.Company);
}
2016.4.10
1、base標籤是用來指定起父類的。
this關鍵字用來代表當前類。
base則是用來代表父類
例如兩個類class A, class B
classB繼承自classA
則,在classB中呼叫classA中的方法,則可用這樣的格式:
base.方法名
Base使用範圍:
(1)呼叫基類上已被其他方法重寫的方法。
(2)指定建立派生類例項時應呼叫的基類建構函式。
public class hBooks
{
public string bookName;
public string ISBN;
public hBooks(string bName,string bISBN)
{
this.bookName = bName;
this.ISBN = bISBN;
}
}
public class Sale : hBooks//定義派生類
{
public double bookSell;
public Sale(string bName,string bISBN,double sell)//子類建構函式
:base(bName,bISBN)//基類建構函式
{
bookSell = sell;
}
}
2、介面的實現
public interface IDrawingObject
{
string Draw();
}
public class Line : IDrawingObject
{
public string Draw()
{
return "I'm Line.";
}
}
Line l = new Line();
Response.Write("直接呼叫類中的方法:"+l.Draw()+"<br/>");
Response.Write("對介面中的方法呼叫1:" + ((IDrawingObject)l).Draw()+"<br/>");
IDrawingObject myline = new Line();
Response.Write("對介面中的方法呼叫2:" + myline.Draw());
3、
基類建構函式的執行要早於子類建構函式
基類建構函式中對於虛方法的呼叫,實際呼叫的是子類中重寫的虛方法
2016.4.11
1、實現多重繼承
public interface IPeople
{
string Name { get; set; }
string Sex { get; set; }
}
public interface ITeacher : IPeople { string teach(); }//繼承公共介面
public interface IStudent : IPeople { string study(); }//繼承公共介面
public class person : IPeople, ITeacher, IStudent//多介面繼承
{
string name = "";
string sex = "";
public string Name { get { return name; } set{ name = value; } }
public string Sex { get { return sex; } set { sex = value; } }
public string teach() { return "姓名:" + Name + " " + Sex ; }
public string study() { return "姓名:" + Name + " " + Sex; }
}
protected void Page_Load(object sender, EventArgs e)
{
person per1 = new person();//例項化類物件
ITeacher itea = per1;//使用派生類物件例項化介面ITeacher
itea.Name = "Ondina";
itea.Sex = "male";
Response.Write(itea.teach()+"<br/>");
IStudent istu = per1;//使用派生類物件例項化介面IStudent
istu.Name = "Kanade";
istu.Sex = "female";
Response.Write(istu.study());
}
2、包含/委託模型
class A
{
public int P{get;set;}
}
class B
{
public A a= new A();
}
{
public int P{get;set;}
}
class B
{
public A a= new A();
}
使用: B.a.P;
3、使用陣列實現虛方法
Drawingobj[] obj = new Drawingobj[4];
obj[0] = new Line();
obj[1] = new Circle();
obj[2] = new Square();
obj[3] = new Drawingobj();
foreach (Drawingobj dobj in obj)
{
Response.Write(dobj.myDraw()+"<br/>");
}
4、過載
方法名相同;引數列表必須不相同(引數型別、引數個數、引數順序);返回值型別可以不相同
不能通過訪問許可權、返回型別、丟擲的異常進行過載,方法的異常型別和數目不會對過載在造成影響
public static string myText(int x,string y){ return x +"-"+ y; }
public static string myText(string y, int x){ return y + "-" + x; }
public static string myText(int x, string y,double z) { return x + "-" + y + "-" + z; }
string ol1 = OL.myText(1,"2");
string ol2 = OL.myText("3", 4);
string ol3 = OL.myText(5,"6",7.8);
Response.Write(ol1+" "+ol2+" "+ol3);