1、常量
語法:
Const 類型 常量名=常量值;
Const double PI=3.14;
使用:
只能在初始化的時候賦值,以後不能賦值,防止意外修改
2、枚舉
語法:
enum 自己起的類型名稱{值1,值2.值n}
enumGender{male,female}
enumQQStatus{online,offline,hidden}
注意:定義枚舉時,值不能是int類型
枚舉類型都可以強制轉換成int類型,枚舉的值在定義時有一個默認的編號,編號從0開始
使用:
QQStatus status=QQStatus.online;
Gender sex;
sex=Gender.male;//不能賦其他值,否則報錯,從而保證了賦值的統一性
定義枚舉值的時候不用雙引號。
讓我們定義一種類型並且在定義這種類型時指定這種類型的所有值
枚舉的定義,一般和類定義在同一個級別。這樣在同一個命名空間下的所有的類就都可以使用這個枚舉了,(變量的作用域!)
方法中類中也可以
枚舉的作用:
限制用戶不能隨意賦值只能定義枚舉時列舉的值中選擇
不需要死記每一個值是什麼,只需選擇相應的值
3、字符串與枚舉的轉換
enum Gender
{
male,female
}
class Program
{
static void Main(string[] args)
{
Gender sex;
Console.WriteLine("請輸入你的性別");
string s =Console.ReadLine();
sex = (Gender)Enum.Parse(typeof(Gender),s);
Console.WriteLine("你輸入的性別是" + sex);
}
字符串類型不能直接賦給枚舉類型,Gender.Male.Tostring和gender sex;sex=console.readline()都是錯誤的
如何把一個字符串轉換成枚舉類型?:
(Gender自己定義枚舉名)Enum.Parse(typeof(Gener自定義枚舉名)," male待轉換的字符串");//記住
待轉換的字符串必須是枚舉中有的值
用戶輸入的值一定要使用try-catch
4、結構
語法:
訪問修飾符 struct 結構名
{
定義結構體成員;//結構體可以包含變量和方法
}
爲什麼要用結構:
聲明一組變量如果多人則聲明多組變量
存儲的這幾個變量之間沒有關係
定義好一個結構之後就可以直接聲明相應的變量了
Person onePerson;//聲明一個結構體就行了 。就包含結構中的所有成員變量
onePerson.age = 20;//通過變量名.成員名來調用結構體中的變量了
onePerson.sex = Gender.male;
onePerson.name ="zhangsan";
Console.WriteLine("")
訪問級別不同枚舉和結構調用要加都加public要不加都不加
由於Person中含有Gender
一個解決方案下多個項目之間互相調用
三層結構
多層調用
注意修飾符
Console.clear();清屏
5、數組
數組的聲明語法:
數據類型 [] 數組名= new數據類型[]
int []score=newint[3]
int []nums={5,3,8}
int nums=new int [3]{5,3,8}個數和聲明數必須一致
int nums=new int[]{5,3,8}可以省略數組個數
int nums=new int[5]{5,3,8}錯誤
如何訪問數組:
通過下標來訪問數組:數組名[編號]
Score[0]=3;
使用索引器訪問指定編號位置的元素,訪問數組元素:nums[],也可以對數組元素賦值
通過 數組名.length 獲得數組的長度
常見問題:求平均值、求最大值、求和、排序
5、方法:
功能:重複使用的代碼
基礎的功能定義爲方法
方法的定義:
[訪問修飾符][static] 返回值類型 方法名([參數])
{
方法體;
}
命名規則:方法名開頭大寫,參數名開頭小寫,參數名、變量名要有意義
方法的調用對於靜態方法,如果在同一個類中,直接寫名字調用就行了
方法定義在類中,如果方法沒有返回值,則返回值類型寫void如果方法沒有返回值()也不能省略
可以直接寫在主程序program類中,也可以添加類,然後寫方法
方法的調用:
靜態方法:static修飾的
類名.方法名();Program.showUI();
在類中調用本類中的方法可以只寫 方法名();另寫的類中定義的函數則需要寫出類名
四種方法:
有返回值有參數
有返回值沒參數
沒返回值有參數
沒返回值沒參數
方法的重載?
在同一個類中,方法名相同,並且方法的參數的個數不同或者對應位置上的類型不同,才能構成重載
繼承? 同一個類子類父類 ?
方法的重載和返回值沒有關係?
方法的參數和個數相同但是返回值類型不同不能構成重載
6、方法的out參數和ref參數
方法只能返回一個值當要返回多個值,怎麼辦?
函數參數默認是值傳遞,也就是賦值了一份
out則是內部爲外部變量賦值,out用於函數需要有多個返回值的場所
實現步驟:
在方法中的參數前加out那麼傳參數的時候也必須在number前加out表明這個參數不是傳入的而是傳出值的
如果參數是以out形式傳入的那麼再傳入前可以不賦初值
在方法中對於out修飾的參數必須先賦初值,並且在使用前賦值
out用於傳出值,在方法中必須對out修飾的傳參賦值
ref可以穿出又可以傳入 非值傳遞而是地址傳遞跟指針差不多
在傳參的過程中如果有out或者ref修飾的話,那麼改變方法中的參數變量的值調用者方法中變量的值也會相應改變
值傳遞和引用傳遞?
例子:實現mytryParase
static void Main(string[] args)
{
string s =Console.ReadLine();
int re;
if (MytryParase(s, out re))
{
Console.WriteLine("轉換成功" + re);
}
else
{
Console.WriteLine("轉換失敗");
}
Console.ReadLine();
}
static boolMytryParase(string s, out intresult)
{
result = 0;
try
{
result =Convert.ToInt32(s);
return true;
}
catch
{
return false;
}
}
例子:寫一個方法計算int類型的數組,返回一個最大值和最小值
static void Main(string[]args)
{
int[]numbers={1,5,9,8,7,5};
int sum,max,min;
sum = compute(numbers,out max, out min);//傳參的時候一定不要忘了out!!!!!!
Console.WriteLine("和是{0},最大值是{1},最小值是{2}", sum, max, min);
Console.ReadLine();
}
static int compute(int[]num, out int max, out int min)
{
int sum= 0;
max =num [0];
min =num [0];
for (int i = 0; i < num.Length; i++)
{
sum = sum + num[i];
if (num[i] > max)
{
max = num[i];
}
if (num[i] < min)
{
min = num[i];
}
}
return sum;
}
Inta=convert.Toint32(a)
Inta=int.parse(a)
int.tryparse(a)
6、變量的作用域:
在方法中定義的變量爲局部變量,其作用域從定義開始到其所在的大括號結束爲止
在一個方法中調用另一個方法中的變量,怎麼辦?
有兩種方法:參數和返回值
如果一個方法有參數在調用時必須傳參數,並且傳參數的個數與對應位置上的類型必須一致
方法訪問調用者的參數 傳參
調用者訪問方法中的值 return返回值(方法定義時void改爲要返回的值的類型)
6、字段:
一個變量定義在類的裏面方法的外面就叫做類的字段,這個變量就可以被本類的所有方法訪問(就可以不用傳參了)。
靜態方法只能訪問靜態字段
非靜態的方法既能訪問靜態字段又可以訪問非靜態字段
非靜態的字段叫做實例字段
類名.字段名 才能訪問到
常量不能聲明爲靜態的,可以放在方法中也可以放在類中方法外
所有方法都可以訪問常量
預編譯指令
瞭解:
窗體中的事件?
消息?
reflect插件反編譯.net程序
7、返回值
string s=Console .ReadLine ();
int i =Convert.ToInt32("22");
爲什麼方法面前能夠定義一個變量受到方法的值是因爲在方法中使用了返回值
只要方法中返回了值,那麼在調用方法時前面就應該有一個變量來接收到後方法的返回值
注意:一個方法只能有一個返回值,一旦方法有返回值,必須通過return返回一個值,並且與返回值類型是相同的
方法內部一般都是封裝的最小功能塊,不強制顯示
Intsum=add(a,b)
得到的就是return返回值傳給了sum,而a、b是傳給方法的值
說明參數是通過方法實現
質數判斷
除到開方就可以了
詳情請查看:http://edu.csdn.net/heima