四个提高C编程技巧的基本方法
在C编程中,有一些技巧可以帮助我们更好地编写代码,并提高程序的稳定性和可用性。本文将介绍四个基本技巧:使用接口编程、使用属性代替原始数据、在Producer/Consumer模式中使用Delegate以及注意初始化顺序。
一、尽量使用接口来编程
在编写程序时,我们常常会遇到需要修改代码以适应不同的集合类型的情况。如果我们使用.NET支持的接口而不是其类来编程,代码会变得更加稳定、可用性也会更高。例如,下面的代码从一个数组中加载ListBox:
```
private void LoadList(object[] items, ListBox l)
{
for (int i 0; i < items.Length; i )
(items[i].ToString());
}
```
但假设这些对象存在于数据库或其他集合中,那么就需要修改程序来支持不同的集合类型。如果我们使用ICollection接口来编写这段代码,就可以不需要修改它来适应任何实现ICollection接口的类型:
```
private void LoadList(ICollection items, ListBox l)
{
foreach (object o in items)
(());
}
```
通过使用接口编程,我们可以增强代码的灵活性和可扩展性。
二、使用属性代替原始数据
因为属性已成为C语言的元素,声明数据元素时无需将其作用域等级设置高于private。相反,属性使得数据元素更具封装性,可以使用lazy evaluation来返回数据。此外,属性可以是virtual或abstract,也可以在接口中定义。
然而,需要注意的是,将数据元素变成属性后,客户端程序便无法访问服务端的新版本程序。对于在Web service中想实现序列化的值,可以将它们变成属性来使用。
例如,我们可以通过以下代码将数据元素私有化:
```
private int TheMonth 0;
[XmlAttribute("Month")]
public int Month
{
get { return TheMonth; }
set { TheMonth value; }
}
```
三、在Producer/Consumer模式中使用Delegate
在实现producer模式时,我们可以使用Delegate来通知consumer。这种方法相对于使用接口更加灵活,Delegate是多点传送的,所以不需要额外的代码即可支持多用户。相对于使用接口,这样做可以降低类之间的耦合度。
例如,下面的类处理键盘输入并将其传给所有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);
}
}
```
任何数目的listeners都可以注册到producer,它们所要做的只是提供一个特定的函数:delegate。
四、注意初始化顺序
在C中,有些变量声明加入了initializer的概念。它们在构造函数之前被执行,实际上变量在基类的构造函数执行前之前被初始化。
因此,在初始化变量时应当避免使用基类中的数据,因为它们还没有被构造。
总结
以上四个技巧都有助于我们更好地编写C代码,并提高程序的稳定性和可用性。通过使用接口编程、使用属性代替原始数据、在Producer/Consumer模式中使用Delegate以及注意初始化顺序,我们可以使程序更加灵活、功能更加完善。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。