c# 物件導向抽象類別的使用

來源:互聯網
上載者:User

標籤:

上一篇 講了 Java 物件導向抽象類別的使用。這次我們來學習 C#物件導向抽象類別的使用。其實方法理論掌握了,語言只是工具。閑話少說。下面是上一篇的需求

抽象類別大家都知道,但是具體有什麼用,為什麼要用到抽象類別。大家肯定有人不太明白。培訓中心老師怎麼教就怎麼用。最近閑來無事。研究起物件導向理論。下面讓我用一個例子來說明一下。物件導向抽象類別的使用方法。只是起到一個入門和拋磚引玉的作用。(理論和語言無關)

定義和概念:

在物件導向的概念中,所有的對象都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的資訊來描繪一個具體的對象,這樣的類就是抽象類別。

下面我們具體看看抽象類別的真面目。

修飾符 abstract  class  類名  同樣也適用c#

上面描述的就是抽象類別。

抽象類別往往用來表徵對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。比如,在一個圖形編輯軟體的分析設計過程中,就會發現問題領域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們又都屬於形狀這樣一個概念,形狀這個概念在問題領域並不是直接存在的,它就是一個抽象概念。而正是因為抽象的概念在問題領域沒有對應的具體概念,所以用以表徵抽象概念的抽象類別是不能夠執行個體化的。不能執行個體化那具體該怎麼用呢。下面以一個簡單的例子說明。 學生王小明去上海學習C#這是需求 通過上面的內容我們知道物件導向的主體是學生(物件導向開發主要就是在需求中找到對象)方法是學習  方法實現的功能是(學生+name(王小明)+"去"+address(上海)+"學習C#")自學離不開例子,一定要找那些簡單的,而且英文單詞也簡單的例子來進行學習(因為主要是掌握物件導向的理論,而不是學習英語)閑言少說,開始編寫代碼。 至於用到的工具,及工具的使用,在此不做介紹,百度一下全有了。我想看這個文章的童鞋們已經熟練使用開發工具了。通過主體分析是學生。第一眼看到學生會想到什麼 人 對 我們先定義一個人的抽象類別Java 代碼public abstract class Person {
  String name="";//即然是人肯定是要有名字的。
  int age=0;//年齡
Person(String name,int age){
  this.name=name;
  this.age=age;
}
abstract void Study();
} public class Student extends Person {

String address="";//多增加一個屬性地址

Student(String name,int age,String address){
  super(name,age);//如果此句不明白,請查百度。太基礎的東西不講。
  this.address=address;
}

@Override
void Study(){//實現的抽象方法
  System.out.print("學生"+name+" 要去"+address+"學習Java");
}
}

 

C# 代碼 就當我們不懂C# 那我們就照葫蘆畫瓢 便於區分 C#代碼我們用藍色public abstract class Person {  String name="";//即然是人肯定是要有名字的。
  int age=0;//年齡
Person(String name,int age){
  this.name=name;
  this.age=age;
}
abstract void Study();
} public class Student extends Person {

String address="";//多增加一個屬性地址

Student(String name,int age,String address){
  super(name,age);//如果此句不明白,請查百度。太基礎的東西不講。
  this.address=address;
}

@Override
void Study(){//實現的抽象方法
  System.out.print("學生"+name+" 要去"+address+"學習Java");
}
}

如果你這麼寫,編繹肯定出錯。不一樣的地方我改成紅色代碼

出錯不怕。有萬能的百度或是我們手裡賣一本C#文法的書。查一下C#繼承的文法是什麼。題外話(只要掌握方法理論。語言只是一個工具。不會我們可以查手冊。但是方法理論是共通的)

通過查詢文法知道繼承是這個樣子的。

public class Student:Person  extends 換成了:這個符號

第一個紅色的問題我們解決了。在解決第二個紅色的問題

super(name,age);

我們在查一下百度 Java super 在C#中如何表示 萬能的百度

查詢發現是這個樣子 :base(name,age)

好我們照著寫出來

public Student(string name,int age,string address)

{
  :base(name,age)
      this.address= address;
}

 

可以負責的告訴你 你要是編繹一下,會出現語法錯誤。怎麼辦。其實開發人員多數時間寫代碼是調試和測試。這就是經驗。下回在遇到同一問題可以快速解決。或是避免此問題的發生。

因為 :base(name,age) 放的位置不對正確的代碼如下

public Student(string name, int age, string address)
: base(name, age)
{
   this.address= address;
}

在編繹一下你會發現還是不對,呵呵。這就是一個最基礎的問題。Java的變數定義預設為 public、C#的變數定義預設為private

我們上一次的Java代碼寫得不規範。導致我們這次的錯誤發生。將上一次的代碼更改一下如下

public abstract class Person {
  public String name="";
  public int age=0;

Person(String name,int age){
   this.name=name;
   this.age=age;
}

abstract void Study();
}

下面我們在將C#正確代碼寫出來

public abstract class Person
{
public string name = string.Empty;
public int age = 0;

public Person(string name,int age)
{
this.name = name;
this.age = age;
}

public abstract void Studey();
}

public class Student:Person
{
   string address = string.Empty;//Java中字串預設值為空白 "" c#中有此方法寫義 string.Empty 空有二種方式 "" null 這個方法全搞定。不明白具體查百度

public Student(string name, int age, string address)
: base(name, age)
{

this.address= address;
}

public override void Studey()
{
  Console.Write(name + " 要去" + address + "學習"); //表單列印字串 查一下百度就可以知道
}

}

下面我們也寫一個測試類別,測試一下。

Program.cs  main 方法寫在這裡面。記住就可以。不明白查百度。

Person per = new Student("王小明", 38, "上海");
per.Studey();

編繹一下

------ 已啟動產生: 項目: AbstractDemo, 配置: Debug Any CPU ------
AbstractDemo -> C:\Documents and Settings\lanzhi.SHENYANG\My Documents\Visual Studio 2008\Projects\AbstractDemo\AbstractDemo\bin\Debug\AbstractDemo.exe
========== 產生: 成功或最新 1 個,失敗 0 個,跳過 0 個 ==========

機器不同。產生的編繹資訊也不一樣。總之看最後一句話,紅色的。說明編繹通過了。我們運行一下。

學生王小明去上海學習C#  但是發現一個問題 螢幕一閃而過,呵呵沒有看清楚,怎麼辦。查一下百度吧。查詢也是學習的過程。我建議大家查MSDN 這個的好處。不用我多說,到時你們就會知道。就像大家不會的字查字典一樣。

查詢發現

Console.ReadKey();//擷取使用者按下的下一個字元或功能鍵。 按下的鍵顯示在控制台視窗中。

還有一種查詢方法,就是 Console 點一下 後面有一堆的方法,中文的解釋全有。

我把修改後的代碼貼上

public class Student:Person
{
    string address = string.Empty;

public Student(string name, int age, string address)
: base(name, age)
{
   this.address= address;
}

public override void Studey()
{
   Console.Write(name + " 要去" + address + "學習");
  Console.ReadKey();//擷取使用者按下的下一個字元或功能鍵。 按下的鍵顯示在控制台視窗中。
}

這時我們在運行一下

發現螢幕上顯示  

學生王小明去上海學習C#  這時螢幕不閃了也不消失了。如果關掉此表單呢。很簡單按下任意鍵,表單關閉了。

之前那個舉一返三的程式員類我想大家也知道如何在C#中寫了吧

代碼如下:

class Programmer:Person
{
    string address = string.Empty;
    string child = string.Empty;

public Programmer(string name, int age, string address, string child)
: base(name, age)
{
     this.address = address;
     this.child = child;
}

public override void Studey()
{
     Console.Write(name + "帶著孩子" + child + " 要去" + address + "進行C#架構師的學習");

     Console.ReadKey();

}
}

class Program
{
static void Main(string[] args)
{
// Person per = new Student("王小明", 38, "上海");
//per.Studey();
     Person per = new Programmer("張小明", 38, "上海", "張小小明");
     per.Studey();
}
}

是不是感覺抽象類別很有用,假如不單有學生,程式猿,還有工人、明星、記者等,只需在這個抽象類別的基礎上增加相應的同能,而且同時可以防止駭客去直接存取抽象類別,因為抽象類別不可以產生對象。還能防止因為自己的馬虎造成遺漏代碼。

學會用抽象的物件導向思想解決問題,是作為程式員一個良好的習慣。

 

聲明如下:

因為本人有很多的工作要做。寫這個主要是利用業餘時間。難免代碼有錯誤的地方。或文字上有錯別字。還是這句話,寫這些主要是教大家如何學習。理論掌握了,語言只是工具。謝謝大家在百忙之中觀看此文。

 

  

c# 物件導向抽象類別的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.