程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 初探c#(九)結構(Structs)

初探c#(九)結構(Structs)

編輯:C#入門知識

1.9 結構(Structs)

  結構和類又非常多的相似之處,如結構可以實現界面,和可以擁有和類一樣的成員。結構與類也有一些重要的區別:結構是值類型,而不是引用類型,所以不支持繼承!結構被存在堆棧中或者是內聯。結構在精心下可以提高存儲效能。例如,定義一個與類有著相同信息的結構可以大大地減少存儲空間。在下例中,程序創建並初始化100個points。在類“Point”中需要分配101個獨立的對象(object)。*/

class Point
{
public int x, y;
public Point() {
x = 0;
y = 0;
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
class Test
{
static void Main() {
Point[] points = new Point[100];
for (int i = 0; i < 100; i++)
points[i] = new Point(i, i*i);
}
}
/*

如果“Point”被作為一個結構,就可以這樣啦:*/

struct Point
{
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
/*

  因為Point在內聯中實例化,所以得到了優化。當然,錯誤運用的只會適得其反。比如,當我們傳遞結構的時候就會比傳遞類要慢。因為結構的傳遞是拷貝值,類是引用值的地址。數據量越大差距就越明顯。

  所以“There is no substitute for careful data structure and algorithm design.”(實在是不想譯了 ^_^ )。

1.10 界面(Interfaces)

  界面用來定義一種程序的契約。有了這個契約,就可以跑開編程語言的限制了(理論上)。而實現界面的
類或者結構要與界面的定義嚴格一致。界面可以包含以下成員:方法、屬性、索引和事件。例子:*/

interface IExample
{
string this[int index] { get; set; }
event EventHandler E;
void F(int value);
string P { get; set; }
}
public delegate void EventHandler(object sender, Event e);
/*

  例子中的界面包含一個索引、一個事件E、一個方法F和一個屬性P。
  界面可以支持多重繼承。就像在下例中,界面“IComboBox”同時從“ITextBox”和“IListBox”繼承。

*/
interface IControl
{
void Paint();
}
interface ITextBox: IControl
{
void SetText(string text);
}
interface IListBox: IControl
{
void SetItems(string[] items);
}
interface IComboBox: ITextBox, IListBox {}
/*

  類和結構可以多重實例化界面。 就像在下例中,類“EditBox”繼承了類“Control”,同時從“IDataBound”和“IControl”繼承。
*/

interface IDataBound
{
void Bind(Binder b);
}
public class EditBox: Control, IControl, IDataBound
{
public void Paint();
public void Bind(Binder b) {...}
}
/*

  在上面的代碼中,“Paint”方法從“IControl”界面而來;“Bind”方法從“IDataBound”界面而來,都以“public”的身份在“EditBox”類中實現。

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