C#學習筆記(五)中級 方法的重載,參數,繼承和多態,異常處理,命名空間,介面,泛型

來源:互聯網
上載者:User

第二十二講 方法的重載

編譯器可以自動選擇調用哪個方法
重載“不是物件導向特徵”,“不是多態特徵”,而是一種“方便”
的特徵
代碼

{
Test theTest=new Test();
//編譯器自動判斷使用哪個函數
int intMax=theTest.max(4,5);
double doubleMax=theTest.max
(4.444,5.555);
string stringMax=theTest.max("無天聽
過嗎?","無天是我");
//顯示出來
MessageBox.Show(intMax.ToString());
MessageBox.Show(doubleMax.ToString
());
MessageBox.Show(stringMax.ToString
());
}

public class Test {
//成員方法
public int max(int x, int y) {
if (x >= y)
return x;
else
return y;
}
public double max(double x, double y) {
if (x >= y)
return x;
else
return y;
}
public string max(string str1, string str2)
{
if (str1.Length >= str2.Length) {
return str1; }
else { return str2; }
}
}

第二十三講 方法的參數 (ref,out,params)

參數:類的成員方法中的參數

當我們定義方法時,使用一些關鍵字修飾形參,將有不同的效果。
定義方法時:形參
調用方法時:實參

參數不確定 用params 雖然不合理 但是支援
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}

private void Form1_Load(object sender,
EventArgs e) {
/*
int x = 9, y = 10;
MessageBox.Show("調用前:" + x + "和
" + y);
Function1(x, y);
MessageBox.Show("調用後:" + x + "和
" + y);
//*/
/*
string s1 = "第一個字串";
string s2 = "第二個字串";
MessageBox.Show("調用前:“" + s1 +
"”和“" + s2 + "“");
Funcion2(ref s1, ref s2);
MessageBox.Show("調用後:“" + s1 +
"”和“" + s2 + "“");
//*/
/*
int ans;
Add(90, 90, out ans);
MessageBox.Show("ans:"+ans);
//*/

double average;
average = CalculateAverage(4.0, 3.2,
5.7);
MessageBox.Show("4.0,3.2,5.7的平均數
是:" + average);
//*/
double[] data = { 4.0, 3.2, 5.7, 33
};
average = CalculateAverage(data);
MessageBox.Show("4.0,3.2,5.7,33的平
均數是:" + average);
}
//值參數
public void Function1(int x, int y) {
x = 10000;
y = 88888;
}
public void Funcion2(ref string s1, ref
string s2) {
s1 = "踩踩我是誰";
s2 = "就不告訴你";
}
//輸出參數
public void Add(int x, int y, out int ans) {
ans = x + y;
}
//多個參數的情況
public double CalculateAverage(params
double[] values) {
double sum = 0;
for (int i = 0; i < values.Length;
i++)
sum += values[i];
return (sum / values.Length);
}
}

第二十四講 繼承和多態

:
virtual
new
override

public class Animal
{
public string word="";
public virtual void Introduce()
{word="I am an animal.";}
}
public class Dog:Animal
{
public override void Introduce()
{word="I am an Dog.";}
}
//沒有成員方法 但是word可以被賦值
//將其值覆蓋
public class Cat:Animal
{
public override void Introduce()
{word="I am an Cat.";}
}
virtual:可以被繼承
override: 已經被繼承
這就是多態 子類的表現形式是多種多樣的

衍生類別從它的直接基類中繼承成員:方法.域、屬性、事件、索引指
示器。除了建構函式和解構函式,衍生類別隱式地繼承了直接基類的所
有成員

第二十五講 異常和異常處理

異常:
1.除數為0
2.訪問的檔案不存在
3.溢出
4.錯誤的強制類型轉化
5.網路原因
6.等等

try-catch-finally

DivideByZeroException

throw new ArgumentNullException();

/*
try {
int nTheZero = 0;
int nResult = 10 / nTheZero;
}
catch (Exception Ex) {
MessageBox.Show("除數不能為
零");
}
finally {
MessageBox.Show("finally");
}
MessageBox.Show("執行try語句後面的語
句");
//*/
/*
try {
int nTheZero = 0;
int nResult = 10 / nTheZero;
}
catch (DivideByZeroException divEx)
{
MessageBox.Show
(divEx.ToString());
}
catch (Exception Ex) {
MessageBox.Show(Ex.ToString
());
}
finally {
MessageBox.Show("finally");
}
MessageBox.Show("執行try語句後面的語
句");
//*/
//前面匹配了 後面就沒有了 異常的子
類型應該放在前面 程式更精準
/*
try { //會把所有的異常捕獲

int nTheZero = 0;
int nResult = 10 / nTheZero;
}
catch {
MessageBox.Show("Catch!!");
}
//*/
try {
string s = null;
if (s == null) {
throw new
ArgumentNullException();
} //自己創造一個異常 拋出
異常
}
catch { MessageBox.Show("接受拋出的
異常"); }
MessageBox.Show("執行try語句後面的語
句");

第二十六講 命名空間

命名空間:一種組織類的機制,例如:我們可以把所有的檔案操作的
類放在一個命名空間。

如果兩個命名空間同時命名 那麼無法區分 因此需要寫全稱!

空間是可以嵌套的

微軟命名空間的類庫

using System.Windows.Forms;
//using Ceng1;
//using Ceng2;
//using Ceng3;
//using Ceng3.Ceng33;

namespace _234 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}

private void Form1_Load(object sender,
EventArgs e) {
Person thePerson = new Person();
//Ceng1.Person thePerson1 = new
Ceng1.Person();
//Ceng2.Person thePerson2 = new
Ceng2.Person();
//Ceng3.Ceng33.Person thePerson3 =
new Ceng3.Ceng33.Person();
}
}
}
namespace Ceng1 {
public class Person { }
}
namespace Ceng2 {
public class Person { }
}
namespace Ceng3 {
public class Person { }
//子空間
namespace Ceng33 {
public class Person { }
}
}

第27節 介面

介面看似是:聲明了一個類,而且類的成員都具有“行為”
public interface IShape
{
void Draw();
}
沒有成員變數,不能使用訪問限制關鍵字

介面

介面interface從兩個基底介面IBase1和IBase2繼承:
interface IChild:IBase1,IBase2
{
void Method1();
void Method2();
}

1.一個介面定義一個協定。使用者和實現者之間的協議。
2.介面在更多的時候,表現出對外提供的服務。所以沒有成員變數
3.形式上可以說,介面是沒有成員變數的抽象類別,但是語義上講不通
4.但在實際中,解決多重繼承的問題
namespace _234 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e) {
IFace PengGe = new Person();
PengGe.ShowFace();
}
}
interface IFace {
void ShowFace();
}
//實現介面的類
class Person : IFace {
public void ShowFace() { MessageBox.Show("嚇死人, 哈哈哈!!!"); }
}
}

第二十八節 泛型

泛型類:帶有“參數”的類。這裡的參數指的是類型。

注意事項:
1.這裡的T、S不知道是什麼類型的,有些語句不能用t>0,t=null
2.你就當T、S是object類型的。object是所有類型的最高父類,包括基礎資料型別 (Elementary Data Type)。
3.好處:高效,簡潔。避免使用object的一些基本開銷。
4.很多東西都可以是泛型的,方法介面委託等等

private void Form1_Load(object sender, EventArgs e) {
//使用string,int來執行個體化Test<T,S>類
Test<string, int> t = new Test<string, int>("PengGe", 26);
//調用泛型類中的方法
t.SetValue();
}

}
//定義一個泛型類,該類有兩個型別參數,分別是T,S
public class Test<T, S> {
//泛型類的型別參數可用於類成員
private T name;
private S age;

public Test(T Name, S Age) {
this.name = Name;
this.age = Age;
}
public void SetValue() {
MessageBox.Show("姓名是:" + name.ToString());
MessageBox.Show("年齡是:" + age.ToString());
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.