国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

C#網(wǎng)絡(luò)應(yīng)用編程基礎(chǔ)練習(xí)題與答案(四)

2024-07-21 02:28:22
字體:
供稿:網(wǎng)友

  1. 與結(jié)構(gòu)化編程方法相比,面向?qū)ο缶幊逃心男﹥?yōu)點(diǎn)?

  【解答】

  (1) 以過程為中心和對象為中心的比較

  結(jié)構(gòu)化編程方法是以過程為中心的,當(dāng)面對一個(gè)問題時(shí),該方法側(cè)重于問題解決過程的層次結(jié)構(gòu)。面向?qū)ο蟮姆治龊驮O(shè)計(jì)方法側(cè)重于對象。對象具有特定的行為和屬性,行為和屬性決定了對象與其他對象的交互作用方式,以及對象本身的行為方式。

  (2) 公開數(shù)據(jù)和隱藏?cái)?shù)據(jù)的比較

  結(jié)構(gòu)化編程方法對數(shù)據(jù)和過程僅僅進(jìn)行簡單的包裝,這些數(shù)據(jù)和過程是公開的,或者說程序中的其他代碼可以訪問這些數(shù)據(jù)和過程。面向?qū)ο蟮膶?shí)現(xiàn)隱藏了特定的數(shù)據(jù),并且只把對象的特定行為公開給用戶。實(shí)現(xiàn)這些特定行為的代碼對用戶來說是不可見的,用戶只能訪問這些公開的行為。

  (3) 單一單元和標(biāo)準(zhǔn)單元的比較

  結(jié)構(gòu)化編程方法是基于單一代碼單元的。面向?qū)ο蟮木幊谭椒ㄔ试S對象是獨(dú)立的。

  (4) 一次性使用和可重用的比較

  根據(jù)不同的實(shí)現(xiàn),結(jié)構(gòu)化過程可能無法重用。而面向?qū)ο蟮姆椒ǎ瑢ο笫且粋€(gè)模塊單元。具有完備的實(shí)體,因此可以具有高度的可重用性。

  (5) 有序算法和無序算法的比較

  結(jié)構(gòu)化編程方法所開發(fā)的程序,其結(jié)構(gòu)往往是線性的(或者說是自頂向下的)。而面向?qū)ο蟮膽?yīng)用程序是一種基于消息或者事件驅(qū)動(dòng)的程序類型。每個(gè)對象都可以向其他對象發(fā)送消息。windows操作系統(tǒng)就是這樣的程序。

  2. 簡要回答下列問題。

  1) 舉例說明new關(guān)鍵字可用于那些方面?

  2) sealed關(guān)鍵字的作用是什么?什么情況下需要使用sealed關(guān)鍵字?

  3) 哪些關(guān)鍵字可以用于版本控制?

  【解答】

  1) 在c#中,new關(guān)鍵字可用作運(yùn)算符或修飾符。作為運(yùn)算符用于在堆上創(chuàng)建對象和調(diào)用構(gòu)造函數(shù)。作為修飾符用于隱藏基類成員的繼承成員。

  2) 在類聲明中使用sealed修飾符可防止其它類繼承此類。在方法聲明中使用sealed修飾符可防止擴(kuò)充類重寫此方法。

  sealed修飾符主要用于防止非有意的派生,但是它還能促使某些運(yùn)行時(shí)優(yōu)化。具體說來,由于密封類永遠(yuǎn)不會有任何派生類,所以對密封類的實(shí)例的虛擬函數(shù)成員的調(diào)用可以轉(zhuǎn)換為非虛擬調(diào)用來處理。

  3) override關(guān)鍵字和new關(guān)鍵字均可用于版本控制。

  在c#中,默認(rèn)情況下方法不是虛擬的。若要使方法成為虛擬方法,必須在基類的方法聲明中使用virtual修飾符。然后,派生類可以使用override關(guān)鍵字重寫基類中的虛擬方法,或使用new關(guān)鍵字隱藏基類中的虛擬方法。如果override關(guān)鍵字和new關(guān)鍵字均未指定,編譯器將發(fā)出警告,并且派生類中的方法將隱藏基類中的方法。

  3. 簡要回答抽象類和接口的主要區(qū)別。

  【解答】

  抽象類和接口的一個(gè)主要差別是:類可以實(shí)現(xiàn)多個(gè)接口,但僅能從一個(gè)抽象類或任何其它類型的類繼承。

  4. 使用委托的優(yōu)點(diǎn)是什么?委托和事件有什么區(qū)別和聯(lián)系?

  【解答】

  c#中的委托類似于c或c++中的函數(shù)指針。使用委托使程序員可以將方法引用封裝在委托對象內(nèi)。然后可以將該委托對象傳遞給可調(diào)用所引用方法的代碼,而不必在編譯時(shí)知道將調(diào)用哪個(gè)方法。與c或c++中的函數(shù)指針不同,委托是面向?qū)ο螅沂穷愋桶踩摹?/p>

  c#中的“事件”是當(dāng)對象發(fā)生某些事情時(shí),類向該類的客戶提供通知的一種方法。事件最常見的用途是用于圖形用戶界面;通常,表示界面中的控件的類具有一些事件,當(dāng)用戶對控件進(jìn)行某些操作(如單擊某個(gè)按鈕)時(shí),將通知這些事件。

  使用委托來聲明事件。委托對象封裝一個(gè)方法,以便可以匿名調(diào)用該方法。事件是類允許客戶為其提供方法(事件發(fā)生時(shí)應(yīng)調(diào)用這些方法)的委托的一種方法。事件發(fā)生時(shí),將調(diào)用其客戶提供給它的委托。

  5. 編寫一個(gè)控制臺應(yīng)用程序,完成下列功能,并回答提出的問題。

  1) 創(chuàng)建一個(gè)類a,在構(gòu)造函數(shù)中輸出“a”,再創(chuàng)建一個(gè)類b,在構(gòu)造函數(shù)中輸出“b”。

  2) 從a繼承一個(gè)名為c的新類,并在c內(nèi)創(chuàng)建一個(gè)成員b。不要為c創(chuàng)建構(gòu)造函數(shù)。

  3) 在main方法中創(chuàng)建類c的一個(gè)對象,寫出運(yùn)行程序后輸出的結(jié)果。

  4) 如果在c中也創(chuàng)建一個(gè)構(gòu)造函數(shù)輸出“c”,整個(gè)程序運(yùn)行的結(jié)果又是什么?

  【解答】

  using system;
  public class a
  {
  public a()
  {
  console.writeline("a");
  }
  }
  public class b
  {
  public b()
  {
  console.writeline("b");
  }
  }
  public class c : a
  {
  b newb = new b();
  }
  class mainclass
  {
  public static void main()
  {
  c newc = new c();
  console.readline();
  }
  }

  輸出結(jié)果:

  b

  a

  如果在c中也創(chuàng)建一個(gè)構(gòu)造函數(shù)輸出“c”,即添加:

  public c()
  {
  console.writeline("c");
  }

  則整個(gè)程序運(yùn)行的結(jié)果為:

  b

  a

  c

  6. 編寫一個(gè)控制臺應(yīng)用程序,完成下列功能,并寫出運(yùn)行程序后輸出的結(jié)果。

  1) 創(chuàng)建一個(gè)類a,在a中編寫一個(gè)可以被重寫的帶int類型參數(shù)的方法mymethod,

  并在該方法中輸出傳遞的整型值加10后的結(jié)果。

  2) 再創(chuàng)建一個(gè)類b,使其繼承自類a,然后重寫a中的mymethod方法,將a中接

  收的整型值加50,并輸出結(jié)果。

  3) 在main方法中分別創(chuàng)建類a和類b的對象,并分別調(diào)用mymethod方法。

  【解答】

  using system;
  public class a
  {
  public virtual void mymethod(int num)
  {
  num += 10;
  console.writeline(num);
  }
  }
  public class b : a
  {
  public override void mymethod(int num)
  {
  num += 50;
  console.writeline(num);
  }
  }
  class mainclass
  {
  public static void main()
  {
  a newa = new a();
  newa.mymethod(2);
  b newb = new b();
  newb.mymethod(2);
  console.readline();
  }
  }

  輸出結(jié)果:

  12

  52

  7. 假設(shè)node類的每一個(gè)節(jié)點(diǎn)包括有兩個(gè)字段:m_data(引用節(jié)點(diǎn)的數(shù)據(jù))和m_next(引用鏈接列表中的下一項(xiàng))。這兩個(gè)字段都是由構(gòu)造函數(shù)方法設(shè)置的。該類有兩個(gè)功能,第一個(gè)功能是通過名為data和next的只讀屬性訪問m_data和m_next字段。第二個(gè)功能是對system.object的tostring虛擬方法進(jìn)行重寫。試分別用類和泛型兩種方法編寫程序?qū)崿F(xiàn)上述功能。

  【解答】

  using system;
  class node
  {
  object m_data;
  node m_next;
  public node(object data, node next)
  {
  m_data = data;
  m_next = next;
  }
  // 訪問結(jié)點(diǎn)數(shù)據(jù)
  public object data
  {
  get { return m_data; }
  }
  // 訪問下一個(gè)結(jié)點(diǎn)
  public node next
  {
  get { return m_next; }
  }
  // 獲取結(jié)點(diǎn)數(shù)據(jù)描述
  public override string tostring()
  {
  return m_data.tostring();
  }
  }
  // 鏈表結(jié)點(diǎn)類的泛型定義
  class node
  {
  t m_data;
  node m_next;
  public node(t data, node next)
  {
  m_data = data;
  m_next = next;
  }
  // 訪問結(jié)點(diǎn)數(shù)據(jù)
  public t data
  {
  get { return m_data; }
  set { m_data = value; }
  }
  // 訪問下一個(gè)結(jié)點(diǎn)
  public node next
  {
  get { return m_next; }
  set { m_next = value; }
  }
  // 獲取結(jié)點(diǎn)數(shù)據(jù)描述
  public override string tostring()
  {
  return m_data.tostring();
  }
  }
  // 使用結(jié)點(diǎn)類型或泛型結(jié)點(diǎn)類型
  class linkedlist
  {
  static void main(string[] args)
  {
  //// 創(chuàng)建整數(shù)鏈表
  //node head = new node(5, null);
  //head = new node(10, head);
  //head = new node(15, head);
  ////遍歷鏈表求整數(shù)和
  //int32 sum = 0;
  //for (node current = head; current != null;
  // current = current.next)
  //{
  // sum += (int32)current.data;
  //}
  //// 輸出結(jié)果
  //console.writeline("sum of nodes = {0}", sum);
  // 用泛型創(chuàng)建整數(shù)鏈表
  node head = new node(5, null);
  head = new node(10, head);
  head = new node(15, head);
  // 遍歷求和
  int32 sum = 0;
  for (node current = head; current != null;
  current = current.next)
  {
  sum += current.data;
  }
  // 輸出
  console.writeline("sum of nodes = {0}", sum.tostring());
  }
  }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 洪洞县| 彭山县| 甘德县| 谢通门县| 林周县| 台前县| 修武县| 宜良县| 满洲里市| 孟州市| 闸北区| 孝感市| 吴桥县| 双城市| 抚宁县| 丽江市| 基隆市| 枣强县| 神农架林区| 崇阳县| 乐至县| 南平市| 疏勒县| 伊川县| 镇原县| 清丰县| 桦甸市| 分宜县| 南阳市| 明光市| 石家庄市| 奉化市| 苏尼特左旗| 武汉市| 桐柏县| 福泉市| 巨野县| 黄平县| 白玉县| 垦利县| 黔西|