深入理解c#多態(tài)
繼承概念
多態(tài):即一個接口,多個功能
同一種操作作用于不同的對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果
多態(tài)性可以是靜態(tài)的或動態(tài)的。在靜態(tài)多態(tài)性中,函數(shù)的響應(yīng)是在編譯時發(fā)生的。在動態(tài)多態(tài)性中,函數(shù)的響應(yīng)是在運行時發(fā)生的
靜態(tài)多態(tài)性
在靜態(tài)多態(tài)性中,函數(shù)的響應(yīng)是在編譯時發(fā)生的
父類中如果有方法需要子類重寫,可以將該方法標記為虛方法
虛方法必須在父類中有實現(xiàn),空實現(xiàn)也可以
虛方法子類可以重寫,也可以不重寫
實現(xiàn)靜態(tài)多態(tài)性有兩種方法;
函數(shù)重載
運算符重載
函數(shù)重載
即在同一范圍中對同一函數(shù)名的多重定義
通過定義函數(shù)的傳參的不同類型或數(shù)量進行區(qū)分
在調(diào)用函數(shù)時,根據(jù)傳的參數(shù)類型和數(shù)量判斷調(diào)用名字相同的那個方法
using System;
namespace 函數(shù)重載
{
class printdata
{
void print(int i)
{
Console.WriteLine("printing int: {0}", i);
}
void print(double f)
{
Console.WriteLine("printing folat: {0}", f);
}
void print(string s)
{
Console.WriteLine("printing string: {0}", s);
}
static void Main(string[] args)
{
printdata p = new printdata();
// 調(diào)用 print 來打印整數(shù)
p.print(34);
// 調(diào)用 print 來打印浮點數(shù)
p.print(234.643);
// 調(diào)用 print 來打印字符串
p.print("Hello Tynam");
Console.ReadKey();
}
}
}
運行結(jié)果

運算符重載
重定義或重載C#中內(nèi)置的運算符
通過關(guān)鍵字operator加運算符的符號來定義
與其他函數(shù)一樣,重載運算符有返回類型和參數(shù)列表
using System;
namespace 運算符重載
{
class Complex
{
public int x;
public int y;
public int z;
public Complex(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
}
public static Complex operator+(Complex v1,Complex v2)
{
return new Complex(v1.x + v2.x,v1.y + v2.y,v1.z + v2.z);
}
public static Complex operator /(Complex v1, Complex v2)
{
return new Complex(v1.x / v2.x, v1.y / v2.y, v1.z / v2.z);
}
}
class Program
{
static void Main(string[] args)
{
Complex v1 = new Complex(1,20,31);
Complex v2 = new Complex(5,6,7);
Complex v3 = v1 + v2;
Complex v4 = v1 / v2;
Console.WriteLine("x is {0} ; y is {1} ; z is {2}", v3.x, v3.y, v3.z);
Console.WriteLine("x is {0} ; y is {1} ; z is {2}", v4.x, v4.y, v4.z);
Console.ReadKey();
}
}
}
運行結(jié)果

可重載和不可重載運算符
可以被重載的一元運算符:+、 -、 !、~、++、--
可以被重載的二元運算符:+、 -、 *、 /、 %
可以被重載的比較運算符:==、!=、<、>、<=、>=
不能被直接重載的條件邏輯運算符:&&、||
不能被重載的賦值運算符:+=、-=、*=、/=、 %=
不能被重載的其他運算符:=、 .、 ?:, ->、 new、 is、sizeof、typeof
動態(tài)多態(tài)性
在動態(tài)多態(tài)性中,函數(shù)的響應(yīng)是在運行時發(fā)生的
使用關(guān)鍵字abstract創(chuàng)建抽象類,用于提供接口的部分類的實現(xiàn)
當一個派生類繼承自該抽象類時,實現(xiàn)即完成
抽象類包含抽象方法,抽象方法可被派生類實現(xiàn)
抽象方法不允許有方法體的
當一個子類繼承抽象類時,必須把父類的所有抽象成員都重寫;若子類也是一個抽象類,可以不寫
子類重寫父類的方法,參數(shù)和返回值必須跟父類一樣
抽象方法不能用static修飾
抽象類是有構(gòu)造函數(shù)的,雖然不能被實例化
抽象類標記abstract,不能有任何實現(xiàn),不能有方法體
using System;
namespace 動態(tài)多態(tài)性
{
abstract class Shape
{
public abstract int area();
}
class Rectangle : Shape
{
private int length;
private int width;
public Rectangle(int a = 0, int b = 0)
{
length = a;
width = b;
}
public override int area()
{
return (width * length);
}
}
class RectangleTester
{
static void Main(string[] args)
{
Rectangle r = new Rectangle(2, 4);
double a = r.area();
Console.WriteLine("RectangleArea is: {0}",a);
Console.ReadKey();
}
}
}
運行結(jié)果

以上就是深入理解c#多態(tài)的詳細內(nèi)容,更多關(guān)于C#多態(tài)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
c#中WinForm使用OpencvSharp4實現(xiàn)簡易抓邊
本文主要介紹了c#中WinForm使用OpencvSharp4實現(xiàn)簡易抓邊,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05
C#實現(xiàn)將漢字轉(zhuǎn)化為2位大寫的16進制Unicode的方法
這篇文章主要介紹了C#實現(xiàn)將漢字轉(zhuǎn)化為2位大寫的16進制Unicode的方法,分析了轉(zhuǎn)換的技巧并以實例形式給出了具體的轉(zhuǎn)換方法,非常具有實用價值,需要的朋友可以參考下2014-12-12
c# winform 解決PictureBox 無法打印全部圖片的問題
這篇文章主要介紹了c# winform 解決PictureBox 無法打印全部圖片的問題,幫助大家更好進行c# winform開發(fā),感興趣的朋友可以了解下2020-12-12

