四個(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以及注意初始化順序,我們可以使程序更加靈活、功能更加完善。