finalize方法:終結器。
實現了終接器會大大的降低程序的性能。
釋放模式:【非托管資源釋放】
手動釋放{dispose()方法或者close()方法。True非托管資源釋放或者是托管資源釋放【我們的類包含了其他 類,這個時候我麼就可以在這裡對其進行釋放,而一般情況下,托管資源是被垃圾回收站回收的。】}---阻止finalize的調用。
自動釋放(finalize()方法。false非托管資源釋放)
public class myresource:IDisposable
{
private bool disposed=false;
public void dispose()
{
}
public void close()
{
}
~myresource()
{
}
private void dispose(bool disposing)
{
判斷句//
}
}
類的修飾符:
訪問控制修飾符;[包括了:default;public;private;internal;protected;protected internal.]
Class mod
{
void defaultMethod();
{
console.writeline("");
}
}
//對於方法的調用是先實例化,然後再進行調用:
Mod mod=new Mod();//實例化。
mod.defaultMethod();//調用過程。
兩個類要能夠相互可見的話可以將這兩個 類放在同一個命名空間下面。
類專用修飾符:
sealed:不能被繼承的類;
partial:能聲明在不同的文件中的類。
類型的轉換:
隱式轉換:
顯式轉換:
代碼:、
class conversions
{
static void main()
{
int a=4;//system.int32
long b;//system.int64
b=a;//隱式轉換
console.writeline(a);
}
}
可以先對於上面設置的兩個變量進行初始化,然後再進行輸出操作。
顯式轉換就是這樣子的:a=(int)b;
checked和unchecked操作符和語句:
在顯式轉換前面加入checked操作服。
在程序中有一句話:
messagebox.show("fashengyichu")能夠彈出一個對相框。
這裡還有一種感覺就是:
b=b+100;
b+=100;
這個時候最開始的初始化b為byte類型,所以這兩句話是有區別的,上面第一句話在操作的時候是很容易出錯的,修改的方式是:在右邊的表達式上加入:
b=(byte)(b+100);
這個時候跟下面那句話就保持一致了。
而下面這句話,因為在右邊的是byte類型的常量,所以就十分直接的隱式轉換成了byte類型了。
引用類型的轉換:
CLR允許強制的轉化。
Fruit f=new Apple();//直接說明了子類可以被強制轉換成為自己的父類。
而要強調的是父類不能轉換成任何一個子類。
要想確切的知道一個對象的類型可以調用gettype()方法。
type t=f.gettype();//*********
Apple a=(Apple)f;//類型轉換的方式。
也可以在輸出的語句中對於參數中的對象進行轉換。
用is操作符:
console.writeline(f is fruit);
console.writeline(f is apple);
console.writeline(a is fruit);
console.writeline(a is apple);
運行的結果是:
True;
false;
true;
true;
這裡我們知道了在使用is操作符的時候只會打印輸出bool值,也就是true和false。
as的意義:比方說:apple a=f as apple;//這裡說明的是如果f兼容與apple,那麼a的返回值就是true,反之就是false。這樣下面的判斷語句就會用判斷表達式:a!=NULL。
foreach循環 ??????
controls屬性表示的是返回值是一個集合 。
foreach(control c in this.controls)
{
listbox1.items.add(c.name);
control c1=c as button;
if(c1!=null)
{
c1.text="kkkkkkkkkkk";
}
}//強制類型轉換的一個簡單的例子。
屬性:
class user
{
private string m_name;
private string m_sex;
//
public void setname(string values)
{name=values;}
public string getname()
{
return name;
}
public void setsex(string values)
{
if (values==""||values=="")
{
sex=values;
}
else{
console.writeline("性別只能為“男”或“女”");
}
}
public string getsex()
{
return sex;
}
public name
{
get{
return name;
}
set{
name=values;
}
public sex
{
get{return sex}
set{
[if判斷語句]
}
}
}
//
}
class property
{
static void main()
{
user zs=new user();
zs.name=("張三");
zs.sex=("男");
console.writeline("姓名:"+zs.getname+"性別:"+zs.getsex)
zs.name="張三";
zs.sex="男";
console.writeline("姓名:"+zs.name+"性別:"+zs.sex)
}
屬性的調用跟類的字段的調用是一模一樣的。
static屬性:只能訪問靜態的。
彈出對話框的上面就是Using system.windows.forms;
年齡屬性應該根據生日生成一個動態的字段 。
private static int m_logincount;
public user()
{m_logincount++;}
public static int logincount
{get
{
return m_logincount;
}
}//只讀屬性。
索引器:
類似於屬性。索引器被稱為 有參屬性。
class arrclass
{
private readonly string name;
public arrclass(string name)
{
this.name=name;
}
public string name
{
get(return name;)
}
}
class test
{
static void main()
{
arrclass[] a=new arrclass[10];
a[0]=new arrclass("");
a[1]=new arrclass("");
a[2]=new arrclass("");
console.writeline("a[0]="+a[0].name);
console.writeline("a[1]="+a[1].name);
console.writeline("a[2]="+a[2].name);
}
}
要定義一個索引器就必須要this,還要加上中括號。
索引器只需要申明一個實例,而類需要聲明多個實例。
哈希表:【容器】
key通常可用來快速查找。
給hashtable裡面加值是通過add來進行操作的。
代碼:
Class indexclass//帶索引器的類。
{
private hashtable name=new hashtable();
public string this[int index]
{
get{return name[index].tostring();}
set{name.add(index,value);}
}
}
class test
{
static void main()
{
//索引器的使用。
indexclass b=new indexclass();
b[100]="zghan";
b[200]="kkkkk";
b[300]="ksldjflksdj";
console.writeline("jjjj"+b[100]);
*******//此處略去三個字!
}
}
索引器和數組的比較:
類數組的 存放 :
索引器有get訪問器和set訪問器。沒有存放變量的地方。
索引器允許重載,
Int[] a=new int[3]
a[0]=1;
a[1]=2;
a[2]=3;//數組的存放。
class arrclass
{}
......
arrclass[]a=new arrclass[3];
a[0]=new arrclass();
a[1]=new arrclass();
a[2]=new arrclass();
//類數組的 存放。
this的關鍵作用:索引器只能使用this。
public int this[string aname]
{
get{
}
set{
}
}
索引器不能被聲明為靜態的。
代碼實例:
Using system;
using systemcollections;
//姓名。課程id。成績。
class coursescore
{
private string name;
private int courseid;
private int score;
public coursescore(string name,int courseid,int score)
{
this.name=name;
this.couseid=couseid;
this.score=score;
}
public string name
{
get{}
set{}
}
}
class coursescoreindexer
{
private arraylist arrcoursescore;
public couresescoreindexer()
{
arrcoursescore=new arraylist();
}
public int this[string name,int courseid]
{
get
{
foreach(coursescore cs in arrcoursescore)
{
if (cs.name==name$$cs.courseid==courseid)
{
return cs.score;
}
}
return -1;
}
set
{
arrcoursescore.add(new coursescore(name,courseid,value))
}
}
public arraylist this[string name]
{
get{}
}
}
class Test
{
static void main()
{
coursescoreindexer csi=new coursescoreindexer();
csi["",1]=90;
console.writeline(csi["",1]);
console.wroteline("chengjiwei:")
}
}
現在將的是C#程序語言的規范:
bitarray類;
可以存放任何長度的。
左移相當於乘以2;右移相當於除以2.
索引器的返回值是bool值,所以在實現的時候最開始的一句話是:
public bool this[int index]
{......}
>>符號表示的是往右移動位數;
<<符號表示的是往左移動位數;
&運算符:都是1的情況下才會最終的結果是1.
~運算符在C#中是按位求補的操作。【0:1;1:0.】
如何使用bitarrary類:
本文出自 “黎黎原上草” 博客