C#類的方法:過載,從寫,虛擬函式,抽象函式,隱藏基類方法!
CSDN廣告是越來越多了,所有部落格筆記不再更新,新網址 DotNet筆記
1:過載 方法過載的主要好處就是,不用為了對不同的引數型別或引數個數,而寫多個函式。
特點:函式名稱必須一樣,返回型別可以不一樣,引數可以不一樣。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DeepCopy { class A { private int a; public int aa { set { a = value; } get { if (a > 0) return a; else { return a = a + 1; } } } public void Get_A() { Console.WriteLine("過載(1):" + this.aa.ToString()); } public void Get_A(int i) { Console.WriteLine("過載(2):" + (this.aa * i).ToString()); } } class Program { static void Main(string[] args) { A testA1 = new A(); testA1.Get_A(); testA1.Get_A(4); Console.Read(); } } }
結果:
2:虛擬函式(virtual),重寫(override)
virtual關鍵字說明了這個函式可以被子類從寫。
override關鍵字說明了這是從寫的父類的函式。
從寫將替換父類中的函式的實現程式碼。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DeepCopy { class A { private int a; public int aa { set { a = value; } get { if (a > 0) return a; else { return a = a + 1; } } } public virtual void Get_A()//說明此函式為虛擬函式,說明可以在子類中從寫! { Console.WriteLine("我是父類的:" + this.aa.ToString()); } } class B : A { public override void Get_A()//重寫父類的虛擬函式 { Console.WriteLine("重寫父類的函式:" + (this.aa + this.aa).ToString()); } } class Program { static void Main(string[] args) { //父類先呼叫被重寫的方法(虛擬函式), A testA1 = new A(); testA1.Get_A(); //通過自身呼叫重寫的方法 B testB = new B(); testB.Get_A(); //轉換成父類的型別,通過父類型別物件呼叫,發現也被修改了! A testA2 = testB; testA2.Get_A(); Console.Read(); } } }
結果:
3:隱藏函式
從父類繼承的函式沒有像預期的那樣工作的時候,我們就可以隱藏它,從新進行實現。被隱藏的函式不需要用virtual關鍵字指明,從新實現也不需要用override
隱藏函式,如名,父類的函式並沒有被覆蓋。通過父類物件仍然可以呼叫。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DeepCopy { class A { private int a; public int aa { set { a = value; } get { if (a > 0) return a; else { return a = a + 1; } } } public void Get_A() { Console.WriteLine("我是父類的:" + this.aa.ToString()); } } class B : A { new public void Get_A() //如果沒有new關鍵字,會發生警告!不過即使沒有new關鍵字,也不影響使用。 { Console.WriteLine("我是隱藏父類後的函式:" + (this.aa + this.aa).ToString()); } } class Program { static void Main(string[] args) { //父類先呼叫被重寫的方法(虛擬函式), A testA1 = new A(); testA1.Get_A(); //通過自身呼叫重寫的方法 B testB = new B(); testB.Get_A(); //轉換成父類的型別,通過父類型別物件呼叫,發現也被修改了! A testA2 = testB; testA2.Get_A(); Console.Read(); } } }
結果:
4: 抽象函式
抽象類中通過abstract定義抽象函式,抽象函式不能再抽象類中進行實現,並且必須在非抽象類的子類中實現。
子類需要通過override關鍵字指定這是從寫的父類的函式。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DeepCopy
{
abstract class A//不能例項化物件!
{
private int a;
public int aa
{
set { a = value; }
get
{
if (a > 0)
return a;
else
{
return a = a + 1;
}
}
}
public abstract void Get_A();//抽象函式在父類中,不能實現;
}
class B : A
{
public override void Get_A() //必須從寫抽象父類的抽象函式
{
Console.WriteLine("我是從寫抽象父類的抽象函式後的:" + (this.aa + this.aa).ToString());
}
}
class Program
{
static void Main(string[] args)
{
B testB = new B();
testB.Get_A();
Console.Read();
}
}
}
結果:
好了。大概C#就這幾種容易混亂的函式!就這樣。
相關推薦
C#類的方法:過載,從寫,虛擬函式,抽象函式,隱藏基類方法!
CSDN廣告是越來越多了,所有部落格筆記不再更新,新網址 DotNet筆記 1:過載 方法過載的主要好處就是,不用為了對不同的引數型別或引數個數,而寫多個函式。 特點:函式名稱必須一樣,返回型別可以不一樣,引數可以不一樣。 using System
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(6) 控制器基類 主要做登入使用者、許可權認證、日誌記錄等工作
索引 簡述 今天我們來寫一個控制器基類 主要做登入使用者、許可權認證、日誌記錄等工作 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,
effective c++ 條款06:若不想使用編譯器自動生成的函數,就該明確拒絕
ble 這樣的 ive c++ 拒絕 類對象 析構 並且 防止 記住:為防止編譯器暗自提供的功能,可將相應的成員函數聲明為privae並且不予實現。也可以使用Uncopyable這樣的父類實現。 對於獨一無二的對象,希望不支持拷貝構造函數和賦值操作符。 class Hom
C++解析(25):關於動態內存分配、虛函數和繼承中強制類型轉換的疑問
cas ror src 一個 聲明 eof struct 定義 namespace 0.目錄 1.動態內存分配 1.1 new和malloc的區別 1.2 delete和free的區別 2.虛函數 2.1 構造函數與析構函數是否可以成為虛函數? 2.2 構造函數與析構
C# 類中隱藏基類方法和Partial
C# 類中隱藏基類方法和Partial 時間 2014-11-14 11:50:03 薑糖水 原文 http://www.cnphp6.com/archives/60699
C#,自己寫的32位MD5加密函式
大體思路都是,MD5加密後得到byte型別的陣列,然後將每個陣列成員轉換成16進位制的string字串,這裡就容易產生BUG,因為轉換成16進位制時,遇到10以內的數字時,轉後都是一個單字元的,但我們每次轉換都要得到兩個字元的字串,網上大多數都沒有考慮到這個,導致加密結果出現
有五個學生,每個學生有3門課的成績, 從鍵盤輸入以上資料(包括姓名,三門課成績), 輸入的格式:如:zhagnsan,30,40,60計算出總成績, 並把學生的資訊和計算出的總分數高低順序存放在磁碟文
有五個學生,每個學生有3門課的成績, 從鍵盤輸入以上資料(包括姓名,三門課成績), 輸入的格式:如:zhagnsan,30,40,60計算出總成績, 並把學生的資訊和計算出的總分數高低順序存放在磁碟檔案"stud.txt"中。 1:定義一個描述學生的類2定義一個操作學生的工
約瑟夫環問題:有n個人排成一列或是一圈,從編號為k的人開始報數,數到m的那個人出列。(Java實現)
文章目錄1.題目2.解析3.總程式碼 約瑟夫環問題 約瑟夫環描述:約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又
ACMNO.44 C語言-平均分 有N個學生,每個學生的資料包括學號、姓名、3門課的成績,從鍵盤輸入N個學生的資料,要求打印出3門課的總平均成績,以及最高分的學生的資料(包括學號、姓名、3門課成績)
題目描述 有N個學生,每個學生的資料包括學號、姓名、3門課的成績, 從鍵盤輸入N個學生的資料, 要求打印出3門課的總平均成績,以及最高分的學生的資料 (包括學號、姓名、3門課成績) 輸入 學生數量N佔一行每個學生的學號、姓名、三科成績佔一行,空格分開。 輸出 各門
徹底解密C++寬字元:1、從char到wchar_t
<本文PDF文件下載>“這個問題比你想象中複雜”(我也學下BS的風格,雖然這句話是我自己臨時想說的。^^)從字元到整數char是一種整數型別,這句話的含義是,char所能表示的字元在C/C++中都是整數型別。好,接下來,很多文章就會舉出一個典型例子,比如,'a
機器學習中,從樣本集合分得訓練集、測試集的三種方法
一、為什麼要分開訓練集與測試集 在機器學習中,我們是依靠對學習器的泛化誤差進行評估的方法來選擇學習器。具體方法如下:我們需要從訓練集資料中產出學習器,再用測試集來測試所得學習器對新樣本的判別能力,以測試集上的測試誤差作為泛化誤差的近似,來選取學習器。 通常我
C++知識積累:過載、隱藏和重寫的區別
基本概念: 過載:是指同一可訪問區內被宣告的幾個具有不同引數列(引數的型別,個數,順序不同)的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。 示例: class A{ public: void test(int a); void test(double a)
C#中自定義控制元件隱藏基類成員(屬性、方法和事件)的方法
編寫自定義控制元件時,總是繼承C#中提供的Control類,而Control類是C#中所有窗體控制元件的基類,裡面定義了大量的屬性、方法和事件,而很多基類成員在自定義控制元件中可能不需要,因為編寫者會希望在自定義控制元件中隱藏這些成員,避免使用者呼叫這些成員。
C#操作Xml:通過XmlDocument讀寫Xml文件
轉自:http://www.cnblogs.com/yukaizhao/archive/2011/07/19/csharp_xmldocument_access_xml.html Xml是擴充套件標記語言的簡寫,是一種開發的文字格式。關於它的更多情況可以通過
判斷101-200之間有多少個素數,並輸出所有素數。 程式分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除, 則表明此數不是素數,反之是素數。
題目:判斷101-200之間有多少個素數,並輸出所有素數。 程式分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除, 則表明此數不是素數,反之是素數。 package bbb; /* * 判斷101-200之間有多少個素數,並輸出所有素數。
當你輸入信用卡號碼的時候,有沒有擔心輸錯了而造成損失呢?其實可以不必這麼擔心,因為並不是一個隨便的信用卡號碼都是合法的,它必須通過Luhn演算法來驗證通過。 該校驗的過程:1、從卡號最後一位數字開始,逆
import java.util.Scanner; /** * 當你輸入信用卡號碼的時候,有沒有擔心輸錯了而造成損失呢?其實可以不必這麼擔心, * 因為並不是一個隨便的信用卡號碼都是合法的,它必須通過Luhn演算法來驗證通過。 該校驗的過程: 1、從卡號最後一位數字
有N個學生,每個學生的資料包括學號、姓名、3門課的成績,從鍵盤輸入N個學生的資料,要求打印出3門課的總平均成績,以及最高分的學生的資料(包括學號、姓名、3門課成績)
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Sca
劍指offer(九) 棧的壓入彈出序列,從上往下列印二叉樹,二叉搜尋樹的後序遍歷序列
棧的壓入、彈出序列 題目描述 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出
給定一個數組和一個數(該數不一定在陣列中),從數組裡刪掉這個數字,返回剩下的陣列長度。
給定一個數組和一個數(該數不一定在陣列中),從數組裡刪掉這個數字,返回剩下的陣列長度。 如:A[] = {1, 2, 3, 4, 5}要刪除數字 3,那麼返回陣列長度為 4。 親愛的小夥伴們,題目是不是很簡單呢? 提示:int removeElement(int
在C#中要自己手動在派生類的建構函式中逐一的初始化基類的欄位嗎
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[