目錄
訪問修飾符
1.public:公有成員,完全公開,沒有訪問限制, 所有的類都可以訪問
2.private:私有成員 ,在類的內部纔可以訪問(類中字段和方法默認的訪問修飾符是private)
3.protected:保護成員,該類內部和繼承類(子類)可以訪問
4.internal:內部的,當前程序集內(本項目)可以訪問
5.protected internal:內部保護的, 只能是本項目內部或繼承類(子類)訪問
靜態方法和實例方法
1.靜態方法:static關鍵字表示
在自己本類中,調用兩種方法
(1)類名.靜態方法名
(2)靜態方法名
不在自己本類中:類名.靜態方法名
2.實例方法:需要new實例化
第一步:實例化一個對象
第二步:對象名.方法名
區別:靜態方法只能訪問自己所在類中的靜態成員(包括靜態數據成員和靜態方法),不能訪問實例成員;實例方法既可以訪問實例成員,也可以訪問靜態成員。
靜態成員與實例成員:由static修飾的稱爲靜態成員,沒有static修飾的稱爲實例成員。
class Program
{
static void Main(string[] args)
{
Test.Say(); //調用的靜態方法在test類中,不再Program類中,要用類名.方法名
Test t = new Test(); //實例方法必須先創建一個對象
t.SayHello(); //調用該方法,對象名.實例名
Console.ReadKey();
}
}
public class Test
{
static int x= 6; //定義了一個靜態成員
int y= 7; //定義了一個實例成員
public static void Say() //靜態方法,static標識
{
Console.WriteLine("今天天氣真好");
x = x+10; //靜態方法中只能使用靜態成員,不能使用實例成員
}
public void SayHello() //實例方法
{
Console.WriteLine("hello,大家好");
//實例方法既可以使用實例成員,也可以使用靜態成員
x = x + 20; //x靜態成員
y = y + 10; //y爲實例成員
}
}
try-catch捕捉異常
1.try中放可能報異常的代碼,發生異常後try代碼塊中的後續代碼不會被執行,catch以後的代碼則會繼續執行,如果try代碼中沒有異常,則不會執行catch當中的內容
2.catch當中放出現異常之後需要執行的代碼。Exception 類主要屬性:Message、StackTrace。message會將錯誤信息提示出來。
3.finally也可以不寫,不管try的語句報不報異常,finally都會執行的,就算try當中有return語句,也會執行finally當中的語句。
string i = "123a";
try
{
int num = Convert.ToInt32(i); //將"123a"轉換成int類型,會報異常
}
catch (Exception ex)
{
Console.WriteLine("不是數字!");
//MessageBox.Show(ex.Message); //顯示異常的消息,MessageBox.Show在winform窗體中使用
}
finally
{
Console.WriteLine("不管報不報異常,我都會執行的,如果try當中有return語句,在返回前,我也會執行的");
}
Console.ReadKey();
字符串轉成數字類型
第一種方法:Convert.ToInt32,to後面可以是任意類型
//將字符串類型轉換爲int類型
int num = Convert.ToInt32("100");
//由string類型轉化爲char類型
char chGender = Convert.ToChar("男");
第二種方法: int.Parse(),.Parse前面可以是其他類型,可能會報異常(try-catch解決)
int num1 = int.Parse("100");
第三種方法:int.TryParse(string,out int number); 返回類型爲bool值
bool result = int.TryParse("100", out int num2);
if (result)
{
Console.WriteLine(num2); //num2爲轉換成功後的數字
}
else
{
Console.WriteLine("不是數字");
}
第四種方法:自定義一個mytryparse方法,實現和第三種方法一樣的功能
判斷是否爲數字的方法:IsNum,函數返回值爲bool類型
public static bool IsNumber(string str,out int num)
{
string strnum="";
num=0;
try
{
num=int.Parse(strnum);
return true;
}
catch
{
return false;
}
}
Main主函數調用此方法
string strnum = "70";
bool results=IsNumber(strnum, out int nums);
if (result)
{
Console.WriteLine(nums);
}
else
{
Console.WriteLine("不能轉換成數字!");
}
類型自動轉換規則(以int和double爲例)
下面這張圖,表示int和double類型的範圍,從圖中我們可以看出,double類型的範圍大於int類型的範圍
類型的自動轉換,其實就是一種隱式轉換,不需要我們寫任何條件,就可以進行轉換。有隱式轉換,就有對應的強制轉換,也就是必須要進行顯式轉換。下面分別介紹隱式轉換和顯示轉換的條件。
int轉double就是一種隱式轉換
int num1 = 10; //定義一個int類型的變量num1
double num2= 30.5; //定義一個double類型的變量num2
num2 = num1; //將int類型的值賦給double類型,隱式轉換
隱式轉換的條件:
(1)源類型和目標類型可以兼容(int和double類型就是相互兼容的類型,而字符串和int類型就不兼容)
(2)由低級向高級轉換(目標類型大於源類型,在這裏,int是低級,double是高級)
其實很好理解,37是int類型,37.0是double類型,可以說所有的int類型數據都可以用double類型的數據表示,也就是說int類型的數據可以隱式轉換成double類型的數據。
強制轉換:
(1)源類型和目標類型一定要相兼容
(2)由高級向低級的轉換,(double類型轉換成int類型)
注意:int轉double 隱式轉換,多小數
double轉int 顯示轉換,丟精度
剛纔說到int和string 類型不能兼容,怎麼能轉換,前面已經介紹過了,在這裏補充的是convert不僅僅是內存級別的轉換,而是考慮數據意義的轉換。convert是一個加工,改造的過程。
Tips:對於表達式
(1)如果一個操作數爲double型,則整個表達式可提升爲double型
(2)求10/3要想得到3.333的處理
int num1 = 10;
int num2 = 3;
double remainder = num1 * 0.1 / num2;
Console.WriteLine("{0:0.000}", remainder);
Console.ReadKey();