2016 - 2024

感恩一路有你

四个提高C编程技巧的基本方法

浏览量:2978 时间:2024-07-06 22:16:13 作者:采采

在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以及注意初始化顺序,我们可以使程序更加灵活、功能更加完善。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。