1. 程式人生 > >從C#談對面向物件的理解點滴(一)

從C#談對面向物件的理解點滴(一)

1.覆蓋:
類的成員宣告中,可以宣告與繼承而來的成員同名的成員。這是稱派生類的成員覆蓋了基類的成員。這是會有個警告,使用new 關鍵字可以關閉這個警告。
2.Base保留字:
Base關鍵字主要是為派生類呼叫基類成員提供一個簡寫的方法。


3.C#中的多型:
多型的定義:同一操作作用於不同的類的例項,不同的類將進行不同的解釋,最後產生不同的執行結果。
編譯時的多型性:
           編譯時的多型性是通過過載來實現的。對於非虛的成員來說,系統在編譯時,根據傳遞的引數、返回的型別等資訊決定實現何種操作。
執行時的多型性:
           執行時的多型性是指直到系統執行時,才根據實際情況決定實現何種操作。C#中,執行時的多型性通過虛成員實現。
編譯時的多型性為我們提供了執行速度快的特點,而執行時的多型性則帶來了高度靈活和抽象的特點。

4.虛方法:
       使用virtual修飾符的方法,成為虛方法,反之為非虛。使用virtual不能和static,abstract,override修飾符同時使用。
如果基類呼叫某個被派生類過載(Override)過的方法,該方法的執行程式碼是派生類中被過載過得方法。如:
Class A
{
    public void F()
        {
           Console.WriteLine("A.F");
        }

     public virtual void G()
        {
            Console.WriteLine("A.G");
        }
}

    class B : A
    {
        new public void F()
        {
            Console.WriteLine("B.F");
        }

        public override void G()
        {
            Console.WriteLine("B.G");
        }
    }

class show
{
     public void main(args[] string)
      {
         B b = new B();
          A a = b;
          a.F();
          b.F();
          a.G();
         b.G();
      }
}
上面執行的結果是:
A.F
B.F
B.G
B.G
也就是說被override過的方法,基類裡的方法也會被更改。但new(覆蓋)就不同了,new只會覆蓋派生類中從基類繼承過來的方法,不會改變基類的方法。這有點像地址傳遞和值傳遞。

5.抽象類abstruct class:
抽象類只能作為其他類的基類,不能直接被例項化,而且對抽象類不能使用new操作符。
抽象類允許包含抽象成員,雖然這不是必須的。也就是說有抽象成員的類一定是抽象類,但沒有抽象成員的類也可能是抽象類。
抽象類不能同時又是密封的。
抽象方法可以過載(Override)一個虛方法(Virtual),但抽象方法沒有其執行體,只要有方法的原型。

6.密封類(sealed class):
密封類不能被任何類繼承。
密封方法必須對基類的虛方法進行過載,提供具體的實現方法,所以在方法的宣告中,sealed修飾符總是和override修飾符同時使用。sealed override void F(){....;}

相關推薦

C#面向物件理解點滴

1.覆蓋:類的成員宣告中,可以宣告與繼承而來的成員同名的成員。這是稱派生類的成員覆蓋了基類的成員。這是會有個警告,使用new 關鍵字可以關閉這個警告。2.Base保留字:Base關鍵字主要是為派生類呼叫基類成員提供一個簡寫的方法。 3.C#中的多型:多型的定義:同一操作作用於

C#之淺析面向物件程式設計思想

   縱觀MicroSoft公司的幾種主流語言,C是面向過程,VB既有面向過程也有面向物件的特性,而C#則是純粹的面向物件的程式語言。在UML的學習過程中,畫類圖、物件圖的時候面向物件的思想就已經用到了具體的學習中,而C#的學習過程中我們接著深入來學習這種思想,只不過這次是

C#之淺析面向物件程式設計思想

<pre name="code" class="csharp">//My concern is my chief concern.     俗話說:“龍生龍鳳生鳳,老鼠的兒子會打洞”,可見在生活中,這種面向物件的思想(既“繼承”)已經深入人心,這篇部落格,就

Python面向物件和類

面向物件程式設計 Ojbect-Oriented Programing  什麼是物件:     物件是指現實中的物體過實體  物件有什麼特徵:     物件有很多屬性(名詞,形容詞)      

javaScript面向物件程式設計-繼承

類有三部分 建構函式內的,供例項化物件複製用的 建構函式外的,直接通過點語法新增的,供類使用,例項化物件訪問不到 類的原型中的,例項化物件可以通過其原型鏈間接地訪問到,也是供所有例項化物件所共用的。 類式繼承 類的原型物件的作用就是為類的原型新增共有方法,但類不

Java面向物件程式設計思想

宣告:學基礎,在校學生,本文所有內容來自純書本,然後通過自己的理解和參考編寫而來,如有說的不對的地方,歡迎評論指錯!(僅做學習交流) 類和物件的建立 類的建立:(public private protected)+ class + 類名 { <類

JavaScript面向物件精要

傳統面向物件的語言幾大特徵:封裝、繼承、多型,在JavaScript中並不適用。JavaScript的弱型別特徵允許你用比其他語言更少的程式碼完成同樣的任務。無需提前設計好類再進行編碼。需要一個具有某個欄位的物件了?隨時隨地都可建立。Nicholas

Java面向物件設計模式——工廠方法模式

工廠方法模式(Factory Method) 工廠方法模式分為三種: 1、普通工廠模式,就是建立一個工廠類,對實現了同一介面的一些類進行例項的建立。首先看下關係圖: 舉例如下:(我們舉一個傳送郵件和簡訊的例子) 首先,建立二者的共同介面: publici

JavaScript基礎——面向物件的程式設計建立物件的幾種方式總結

簡介 面向物件(Object-Oriented, OO)的語言有一個標誌,那就是它們都有類的概念,而通過類可以建立任意多個具有相同屬性和方法的物件。前面提到過,ECMAScript中沒有類的概念,因此它的物件也與基於類的語言中的物件有所不同。 ECMA-262把物件定義為:

JAVA面向物件學習筆記

1、方法: 1)方法不能獨立定義,方法只能在類體裡定義; 2)從邏輯意義上看,方法要麼屬於該類本身,要麼屬於該類的一個物件; 3)永遠不能獨立執行方法,只想方法必須使用類或物件作為呼叫者; 4)static修飾的方法不能訪

面向物件學習心得

學習零件價格求和小程式心得:1.養成好習慣,編寫java程式之前建一個包package com.zjs;2.有關ArrayList動態陣列的知識:List list=new ArrayList();有關函式:list.add();list.remove();......使用I

面向物件設計原則——單一職責原則

單一職責原則定義(Single Responsibility Principle,SRP) 一個物件應該只包含 單一的職責,並且該職責被完整地封裝在一個類中。 Every  Object should have  a single responsibility, an

面向物件理解2

面向過程與面向物件的區別: 面向過程是一種直接的程式設計方法,它是按照程式語言的思路考慮問題。通過順序執行一組語句來實現一個功能,這些語句的執行過程就是整個程式。 面向物件是一種抽象度更高的程式設計方法。它的目標是使模組的抽象度更高,目的是可複用。面向物件三大特性:封裝,繼承,多型。 面向過程可以說是從細節方

面向物件”與“面向過程”的理解

面向過程,顧名思義是更注重過程。面向物件,是更注重物件。面向過程的實現過程是整個程式以步驟劃分,如五子棋第一步開始遊戲,第二步黑方先行等等。面向物件的實現過程是整個程式以物件劃分,以物件有什麼功能(方法)來實現,如五子棋分為黑白雙方、棋盤物件、規則物件。

C++面向物件高階程式設計 第二週 侯捷

三大函式——拷貝構造、拷貝賦值、解構函式   拷貝構造——接受的是自己這種東西   ctor和dtor建構函式和解構函式 字串有兩種: 一種是前面有一個常數,用於記錄字串的長度,此字串的末尾沒有結束符號。 另一種是字串的末尾有結束符號,字串

C++面向物件高階程式設計 第一週 侯捷

標頭檔案與類宣告   標頭檔案中的防衛式宣告 #ifndef _FILENAME_ #define _FILENAME_ //... #endif 擴充套件:為什麼要新增防衛式宣告(防止由於同一個標頭檔案被包含多次,而導致了重複定義。) https://www.cnbl

侯捷 C++面向物件高階開發筆記整理

C++面向物件高階開發(上) 一、C++程式設計簡介 (1)基於物件:只有一個class的程式設計 object based 面向物件:幾個class的程式設計 object oriented (2)class的經典分類: (A)class without pointer membe

侯捷 C++面向物件高階開發筆記整理

C++面向物件高階開發(下) 一、導讀 (1)泛型程式設計和麵向物件程式設計分屬不同的思維, (2)由繼承關係所形成的物件模型,包含this指標,vptr指標,vtbl虛表,虛機制,以及虛擬函式造成的多型。 二、conversion function 轉換函式 (1)通過指定關鍵

c#面向物件之繼承經驗

假設有一個基類A,另外有個繼承A的子類B,當建立物件a時===A a = new B();a.PrintObj();=== 用a去呼叫方法PrintObj(),在方法內部會出異常;因為dtObj沒有被例項化;如果去掉A的無參建構函式裡的 註釋,呼叫正確;子類呼叫父類方法,方法類用到的物件必須

C++面向物件高階程式設計 第三週 侯捷 類與類之間的關係

組合與繼承 Composition(複合) 類中有類  Adapter(一種設計模式名) 所有的功能都在的deque中完成了,queue想擁有deque的功能,就這麼做。 queue裡面,只實現了呼叫個deque的功能,並沒有實現deque的全部功能。