程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> [你必須知道的.NET] 第四回:後來居上:class和struct(2)

[你必須知道的.NET] 第四回:後來居上:class和struct(2)

編輯:關於C語言

4. 經典示例

4.1 小菜一碟

下面以示例為說明,來闡述本文的基本規則,詳細見注釋內容。

(1)定義接口

interface IPerson
{
     void GetSex();
}

(2)定義類

public class Person
{
public Person()
{
}

public Person(string name, int age)
{
_name = name;
_age = age;
}

private string _name;

public string Name
{
get { return _name; }
set { _name = value; }
}

private int _age;

public int Age
{
get { return _age; }
set { _age = value; }
}
}

(3)定義結構

//可以繼承自接口,不可繼承類或結構
struct Family: IPerson
{
public string name;
public int age;
public bool sex;
public string country;
public Person person;

//不可以包含顯式的無參構造函數和析構函數
public Family(string name, int age, bool sex, string country, Person person)
{
this.name = name;
this.age = age;
this.sex = sex;
this.country = country;
this.person = person;
}

//不可以實現protected、virtual、sealed和override成員
public void GetSex()
{
if (sex)
Console.WriteLine(person.Name + " is a boy.");
else
Console.WriteLine(person.Name + " is a girl.");
}

public void ShowPerson()
{
Console.WriteLine("This is {0} from {1}", new Person(name, 22).Name, country);
}

//可以重載ToString虛方法
public override string ToString()
{
return String.Format("{0} is {1}, {2} from {3}", person.Name, age, sex ? "Boy" : "Girl", country);
}
}

(4)測試結構和類

猜猜運行結果如何,可以順便檢查檢查對這個概念的認識。

4.2 .Net研究

在.Net 框架中,System.Drawing命名空間中的有些元素,如System.Drawing.Point就是實現為struct,而不是class。其原因也正在於以上介紹的各方面的權衡,大家可以就此研究研究,可以體會更多。另外,還有以struct實現的System.Guid。

5. 結論

對基本概念的把握,是我們進行技術深入探索的必經之路,本系列的主旨也是能夠從基本框架中,提供給大家一個通向高級技術的必修課程。本文關於class和struct的討論就是如此,在.Net框架中,關於class和struct的討論將涉及到對引用類型和值類型的認識,並且進一步將觸角伸向變量內存分配這一高級主題,所以我們有必要來了解其運行機制,把握區別和應用場合,以便在平常的系統設計中把握好對這一概念層次的把握。

另外,請大家就以下問題進行討論,希望能夠更加清晰本文的拓展:

·struct還主要應用在哪些方面?

·C++和C#中,關於struct的應用又有所不同,這些不同又有哪些區別?

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