卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

四個(gè)提高C編程技巧的基本方法

在C編程中,有一些技巧可以幫助我們更好地編寫代碼,并提高程序的穩(wěn)定性和可用性。本文將介紹四個(gè)基本技巧:使用接口編程、使用屬性代替原始數(shù)據(jù)、在Producer/Consumer模式中使用Delegate

在C編程中,有一些技巧可以幫助我們更好地編寫代碼,并提高程序的穩(wěn)定性和可用性。本文將介紹四個(gè)基本技巧:使用接口編程、使用屬性代替原始數(shù)據(jù)、在Producer/Consumer模式中使用Delegate以及注意初始化順序。

一、盡量使用接口來編程

在編寫程序時(shí),我們常常會(huì)遇到需要修改代碼以適應(yīng)不同的集合類型的情況。如果我們使用.NET支持的接口而不是其類來編程,代碼會(huì)變得更加穩(wěn)定、可用性也會(huì)更高。例如,下面的代碼從一個(gè)數(shù)組中加載ListBox:

```

private void LoadList(object[] items, ListBox l)

{

for (int i 0; i < items.Length; i )

(items[i].ToString());

}

```

但假設(shè)這些對(duì)象存在于數(shù)據(jù)庫或其他集合中,那么就需要修改程序來支持不同的集合類型。如果我們使用ICollection接口來編寫這段代碼,就可以不需要修改它來適應(yīng)任何實(shí)現(xiàn)ICollection接口的類型:

```

private void LoadList(ICollection items, ListBox l)

{

foreach (object o in items)

(());

}

```

通過使用接口編程,我們可以增強(qiáng)代碼的靈活性和可擴(kuò)展性。

二、使用屬性代替原始數(shù)據(jù)

因?yàn)閷傩砸殉蔀镃語言的元素,聲明數(shù)據(jù)元素時(shí)無需將其作用域等級(jí)設(shè)置高于private。相反,屬性使得數(shù)據(jù)元素更具封裝性,可以使用lazy evaluation來返回?cái)?shù)據(jù)。此外,屬性可以是virtual或abstract,也可以在接口中定義。

然而,需要注意的是,將數(shù)據(jù)元素變成屬性后,客戶端程序便無法訪問服務(wù)端的新版本程序。對(duì)于在Web service中想實(shí)現(xiàn)序列化的值,可以將它們變成屬性來使用。

例如,我們可以通過以下代碼將數(shù)據(jù)元素私有化:

```

private int TheMonth 0;

[XmlAttribute("Month")]

public int Month

{

get { return TheMonth; }

set { TheMonth value; }

}

```

三、在Producer/Consumer模式中使用Delegate

在實(shí)現(xiàn)producer模式時(shí),我們可以使用Delegate來通知consumer。這種方法相對(duì)于使用接口更加靈活,Delegate是多點(diǎn)傳送的,所以不需要額外的代碼即可支持多用戶。相對(duì)于使用接口,這樣做可以降低類之間的耦合度。

例如,下面的類處理鍵盤輸入并將其傳給所有registered listeners:

```

public class KeyboardProcessor

{

private OnGetLine theFunc null;

public OnGetLine OnGetLineCallback

{

get { return theFunc; }

set { theFunc value; }

}

public void Run()

{

string s;

do

{

s ();

if (s.Length 0)

break;

if (theFunc ! null)

{

[] funcs ();

foreach (OnGetLine f in funcs)

{

try

{

f(s);

}

catch (Exception e)

{

Console.WriteLine("Caught Exception: {0}", );

}

}

}

} while (true);

}

}

```

任何數(shù)目的listeners都可以注冊到producer,它們所要做的只是提供一個(gè)特定的函數(shù):delegate。

四、注意初始化順序

在C中,有些變量聲明加入了initializer的概念。它們在構(gòu)造函數(shù)之前被執(zhí)行,實(shí)際上變量在基類的構(gòu)造函數(shù)執(zhí)行前之前被初始化。

因此,在初始化變量時(shí)應(yīng)當(dāng)避免使用基類中的數(shù)據(jù),因?yàn)樗鼈冞€沒有被構(gòu)造。

總結(jié)

以上四個(gè)技巧都有助于我們更好地編寫C代碼,并提高程序的穩(wěn)定性和可用性。通過使用接口編程、使用屬性代替原始數(shù)據(jù)、在Producer/Consumer模式中使用Delegate以及注意初始化順序,我們可以使程序更加靈活、功能更加完善。

標(biāo)簽: