`
net_liu
  • 浏览: 231314 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#的几个技巧

阅读更多

1.如果可能尽量使用接口来编程

  .NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类。然而,在这种情况下如果你用.NET支持的接口而不是它的类来编程时,代码会变得更加稳定、可用性会更高。请分析下面的代码:
private void LoadList (object [] items, ListBox l)
{
 for (int i = 0; i < items.Length;i++)
  l.Items.Add (items[i].ToString ());
}

  这个函数从一个可为任何对象的数组中加载ListBox,这段代码被限定为只能使用数组。假想过些时候你发现那些对象存在数据库中,或别的集合中。那么你需要修改程序来使用不同的集合类型。如果你用ICollection接口来写那段程序,你就不用修改那段程序了,对于任何实现ICollection接口的类型它都能很好的工作:

private void LoadList (ICollection items,ListBox l)
{
  foreach (object o in items)
  l.Items.Add (o.ToString ());
}

  ICollection被数组和所有System.Collection中的集合实现。此外,多维数组也支持ICollection接口。如果那还不够的话,数据库.NET类同样支持ICollection接口。用接口写的这个函数不用需改就可以才许多中情况下使用。

  2. 使用属性代替原始数据

  因为属性已经成为语言本身的元素,所以声明数据元素时它的作用域等级没有必要大于private。因为代码本身会把属性看成数据元素,你并没有失去使用简单数据类型的便利性 。相反它会使你的代码更加灵活功能更加强大。属性使你的数据元素封装性更好。属性可以让你使用lazy evaluation来返回数据。lazy evaluation的意思是当用户请求时才计算它的值,而不是一直保留着它。

  最后,属性可以是virtual也可以是abstract。你也可以在接口中定义属性。

  这里还有维护方面的因素应当注意:尽管操作两者的方法是一样的,但是你把一个数据元素变成属性,那么原先客户端的程序便不能访问服务端的新版本程序了。实际上对于在Web service中你想实现序列化的值你可以把它们变成属性来使用:

private int TheMonth = 0;

[XmlAttribute ("Month")]
public int Month
{
 get {
  return TheMonth;
 }
 set {
  TheMonth = value;
 }
}

  简单通过属性就可以使你的所有数据元素私有化。

  3. 在Producer/Consumer 的Idiom中使用Delegate

  当你生成一个实现producer idiom类的时候,使用deletate来通知consumer。这种方法相对于用接口更加灵活。Delegate是多点传送的,所以不用加额外的代码你就何以支持多用户。相对于用接口这样做可使类之间的耦合性降低。

  下面的类处理键盘输入并把它传给所有的registered listeners:

public class KeyboardProcessor
{
private OnGetLine theFunc = null;

public OnGetLine OnGetLineCallback {
 get {
  return theFunc;
 }
 set {
  theFunc = value;
 }
}

public void Run (){
// Read input.
// If there is any listeners, publish:
string s;
do {
 s = Console.ReadLine ();
 if (s.Length == 0)
  break;
 if (theFunc != null){
  System.Delegate [] funcs =theFunc.GetInvocationList();
  foreach (OnGetLine f in funcs) {
   try {
    f (s);
   } catch (Exception e) {
    Console.WriteLine
    ("Caught Exception: {0}", e.Message);
   }
  }
 }
} while (true);
}

  任何数目的listeners都可注册到producer,它们所要做的只是提供一个特定的函数:deletate。

  4. 注意初始化顺序

  C#中对于一些变量声明加入了initializer的概念。它们在构造函数之前被执行,实际上变量在基类的构造函数执行前之前被初始化。

  所以,在初始化变量的时候不要用基类中的数据,因为它们还没有被构造。

      5、将图片保存到一个XML文件
WinForm的资源文件中,将PictureBox的Image属性等非文字内容都转变成文本保存,这是通过序列化(Serialization)实现的,
例子://
using System.Runtime.Serialization.Formatters.Soap;
Stream stream = new FileStream("E:\\Image.xml",FileMode.Create,FileAccess.Write,FileShare.None);
SoapFormatter f = new SoapFormatter();
Image img = Image.FromFile("E:\\Image.bmp");
f.Serialize(stream,img);
stream.Close();

      6、屏蔽CTRL-V
在WinForm中的TextBox控件没有办法屏蔽CTRL-V的剪贴板粘贴动作,如果需要一个输入框,但是不希望用户粘贴剪贴板的内容,可以改用RichTextBox控件,并且在KeyDown中屏蔽掉CTRL-V键,例子:

private void richTextBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.Control && e.KeyCode==Keys.V)
e.Handled = true;
}

---------------------------------------------------------------------
分享到:
评论

相关推荐

    几个C#编程的小技巧

    在本篇文章中,我们将探讨几个实用的C#编程技巧,旨在帮助开发者提升代码质量和效率。 #### 最小化窗口 在Windows应用程序中,有时我们需要控制窗体的状态,比如最小化窗口。这可以通过重写窗体的`WndProc`方法来...

    C#编程实例与技巧 C#编程实例与技巧

    在深入学习C#编程实例与技巧时,我们可以从以下几个方面进行探讨: 1. **基础语法**:C#的基础语法包括变量定义、数据类型(如int、string、bool等)、控制结构(如if语句、for循环、while循环)、函数等。理解这些...

    C#编程经验技巧宝典

    73 &lt;br&gt;0106 如何获得一个字符串中数字的长度 74 &lt;br&gt;0107 如何获得字符串中数字或字母的长度 74 &lt;br&gt;0108 如何获得字符串中某个数字的位置 75 &lt;br&gt;0109 获得字符串中汉字的个数 76 &lt;br&gt;0110...

    c#一些常用实用技巧

    这篇文档将深入探讨几个关键的C#技巧,旨在帮助初学者更好地理解和运用C#。 1. **Lambdas表达式**:Lambda表达式是C#中一种简洁的函数表示方式,常用于匿名方法。例如,你可以用它来定义事件处理程序或作为 LINQ ...

    C# 开发和使用中的33个技巧

    根据给定文件的部分内容,以下将详细解析与C#开发相关的几个技巧,这些技巧涵盖了从Flash与C#的交互、DataGrid操作、程序版本管理、强名称密钥处理到数据库查询等多个方面。 ### 技巧23:Flash与C#程序的交互 - **...

    C#开发经验技巧宝典

    0883 对某期间的数据进行查询的几种方法 519 0884 NOT与谓词进行组合条件的查询 520 19.6 聚合函数 520 0885 聚合函数SUM的使用 520 0886 聚合函数AVG的使用 521 0887 如何使用聚合函数MAX 521 0888 ...

    100多个c#开发小技巧

    这里,我们将深入探讨几个关键的标签和文档主题,包括C#技术、技巧、socket编程、datagridview控件的使用以及水晶报表的创建。 【C#技术】C#是一种面向对象的编程语言,广泛应用于Windows桌面应用、Web应用、游戏...

    C# 很酷的应用技巧

    接着,几个C#编程的小技巧.doc涵盖了一些实用的编程技巧,如利用lambda表达式简化代码,使用匿名方法快速定义回调,以及如何运用linq进行数据查询等。这些技巧能够使代码更加简洁、可读性强,同时提高开发效率。 在...

    C#知识库收藏C#语言程序设计技巧.

    在提供的压缩文件中,我们看到几个可能相关的文件: 1. **CSHigh.exe.config** - 这通常是C#应用程序的配置文件,用于存储应用运行时的设置,如连接字符串、日志级别等。开发者可以通过修改它来调整应用程序的行为...

    C#开源资源大汇总 , 磨练你的c#技巧

    在压缩包子文件的文件名称列表中,我们看到以下几个文件: 1. `[Content_Types].xml`:这是Open Packaging Conventions(OPC)标准的一部分,用于定义压缩包内不同类型的文件应如何解析。在Microsoft Office文档中常见...

    C#技巧1000个

    这一过程会生成Excel.dll、Office.dll和VBIDE.dll等几个重要的DLL文件,这些文件将被用于后续的C#代码编写中。 #### 创建Excel报表 接下来,使用C#和Visual Studio.NET环境创建一个简单的Windows应用程序,例如...

    C#学习 输入几个数值倒排

    在探讨"C#学习 输入几个数值倒排"这一主题时,我们深入分析了如何在C#编程语言中实现数值数组的倒序排列。该知识点对于初学者掌握数组操作、输入输出控制以及基本算法逻辑具有重要意义。 ### 知识点一:数组的定义...

    C#读取Word文档的技巧

    在C#读取Word文档的实现中,需要注意以下几点: 1. 需要在项目中添加对Microsoft Word 9.0 object library的引用,以便使用Word.ApplicationClass下的方法。 2. 需要使用Word.ApplicationClass下的方法来处理Word...

    C#程序开发技巧大全第1章

    本章内容可能会涵盖以下几个关键知识点: 1. **C#语法基础**:C#的语法结构与C++和Java有诸多相似之处,包括变量声明、数据类型(如整型、浮点型、字符串、布尔型等)、常量、运算符、控制流(如if语句、for循环、...

    C#编程几个典型实例

    综合上述内容,我们在C#编程中会遇到以下几种情况: 1. 使用接口来强制类实现特定的方法集,实现多态性。 2. 使用抽象类为子类提供共享的实现,并定义必须被子类实现的抽象方法。 3. 利用"ref"关键字进行按引用传递...

    用C#2005编写的几个小游戏

    标题 "用C#2005编写的几个小游戏" 提供了关键信息,即这些小游戏是使用C#编程语言的2005版本开发的。C#是一种面向对象的编程语言,由微软公司开发,主要用于构建Windows应用程序、网络服务以及游戏。在C# 2005版本中...

    c#简明(c#简明c#简明c#简明c#简明)

    C#的基础知识包括以下几个方面: 1. **语法结构**:C#的语法与C++和Java有相似之处,包括变量声明、数据类型(如int、string、bool)、控制流(如if语句、for循环、while循环)、函数定义和调用等。 2. **类和对象...

    C# 技巧与完全手册

    在C#编程技巧方面,书中可能会涵盖以下几个关键点: 1. **面向对象编程**:C#的核心是面向对象编程(OOP),包括类、对象、接口、继承、多态等概念。理解这些基础概念是成为熟练C#程序员的关键。 2. **异常处理**...

Global site tag (gtag.js) - Google Analytics