程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 繼承中關於屬性的一些問題(2)

繼承中關於屬性的一些問題(2)

編輯:關於C語言

從上面可以看出,屬性的這些規則與方法十分類似。對於屬性的訪問器,我們可以把get訪問器看成是一個與屬性修飾符相同、沒有參數、返回值為屬性的值類型的方法;把set訪問器看成是一個與屬性修飾符相同、僅含有一個value參數、返回類型為void的方法。還記得第十章中客戶住宿的例子嗎?還是讓我們擴展這個例子來說明屬性在繼承中的一些問題。

程序清單14-8:

using System;
public enum sex
{
 woman,
 man,
};
abstract public class People
{
 private string s_name;
 public virtual string Name{
    get{
        return s_name;
    }
 }
 private sex m_sex;
 public virtual sex Sex{
    get{
        return m_sex;
    }
 protected string s_card;
 public abstract string Card
 {
    get;set;
 }
}

上面的例子中聲明了“人”這個類,人的姓名Name和性別Sex是兩個只讀的虛屬性;身份證號Card是一個抽象屬性,允許讀寫。因為類People中包含了抽象屬性Card,所以Pelple必須聲明是抽象的。下面我們為住宿的客人編寫一個類,類從People中繼承。

程序清單14-9:

class Customer:People
{
 string s_no;
 int i_day;
 public string No{
    get{
         return s_no;
    }
    set{
        if(s_no!=value){
           s_no=value;
        }
       }
   }
 public int Day{
   get{
       return i_day;
      }
   set{
       if(i_day!=value){
          i_day=value;
          }
      }
  }
  public override string Name{
  get{return base.Name;}
  }
  public override sex Sex{
  get(return base.Sex}
  }
  public override string Card{
  get{
      return s_card;
     }
  set{
      s_card=value;
     }
  }
}

在類Customer中,屬性Name、Sex和Card的聲明都加上了override修飾符,屬性的聲明都與基類People中保持一致。Name和Sex的get訪問器、Card的get和set訪問器都使用了base關鍵字來訪問基類People中的訪問器。屬性Card的聲明重載了基類People中的抽象訪問器。這樣,在Customer類中沒有抽象成員的存在,Customer可以是非虛的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved