- 浏览: 232707 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
net_liu:
zxptian 写道楼主能把TransferFiles也贴出来 ...
c# Socket 文件的传输 -
zxptian:
楼主能把TransferFiles也贴出来分享下吗?
c# Socket 文件的传输
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;
}
发表评论
-
List转DataTable(反射)
2012-02-06 10:48 2740List转DataTable(反射) // ... -
DataTable转泛型
2012-01-31 17:39 1277DataTable转泛型 public clas ... -
利用鼠标钩子将鼠标中键转为左键
2011-05-04 13:50 1643利用鼠标钩子将鼠标中键转为左键 鼠标 ... -
C# 命名规范
2011-04-01 13:32 1969C# 命名规范 文章分类:.net编程 ... -
VS2008 快捷键大全
2011-04-01 13:30 915VS2008 快捷键大全[转帖] 文章分类 ... -
C# 中的委托和事件
2011-04-01 13:26 1282缩略显示 C# 中的委托和事件 文章 ... -
C#Winform限制Textbox只能输入数字
2011-04-01 13:20 7480C#Winform限制Textbox ... -
C# 跳转语句(break,continue,goto,return,throw)
2011-04-01 12:38 3427C# 跳转语句(break,continue,goto,r ... -
C#窗体固定在桌面上
2010-11-19 10:25 1647[DllImport("user32.dll& ... -
if-else 都输出的方法
2010-10-12 11:44 1306if-else 都输出的方法 if (new Func< ... -
反射技术
2010-09-15 17:42 921什么是反射? 反射就 ... -
发一个接口做参数的例子
2010-08-06 08:48 956发一个接口做参数的例子 回头接口 using System ... -
C#中使用正则表达式
2010-08-04 13:39 1335C#中的正则表达式包含 ... -
反射动态调用类成员
2010-08-04 13:30 981使用反射动态调用类成员,需要Type类的一个方法:Invoke ... -
在vs2005中发送邮件
2010-08-03 16:14 1145在vs2005中发送邮件的方法如下: ... -
XML数据排序
2010-06-30 14:20 3405根据XML数据的Index 来进行排序 方法一: ... -
程序动态升级版本
2010-06-30 10:00 997C#实现程序动态升级版本。通过反射获取本地版本,然后跟服务器中 ... -
将DataGridView 数据导出到Excel
2010-06-25 15:46 5091/// <summary> ... -
将Excel导入到Oracle
2010-06-25 15:39 5416private void btnInsert_Click(o ... -
序列化与反序列化
2010-06-24 15:44 917多个对象序列化和反序列化 namespace Dome { ...
相关推荐
在本篇文章中,我们将探讨几个实用的C#编程技巧,旨在帮助开发者提升代码质量和效率。 #### 最小化窗口 在Windows应用程序中,有时我们需要控制窗体的状态,比如最小化窗口。这可以通过重写窗体的`WndProc`方法来...
在深入学习C#编程实例与技巧时,我们可以从以下几个方面进行探讨: 1. **基础语法**:C#的基础语法包括变量定义、数据类型(如int、string、bool等)、控制结构(如if语句、for循环、while循环)、函数等。理解这些...
73 <br>0106 如何获得一个字符串中数字的长度 74 <br>0107 如何获得字符串中数字或字母的长度 74 <br>0108 如何获得字符串中某个数字的位置 75 <br>0109 获得字符串中汉字的个数 76 <br>0110...
这篇文档将深入探讨几个关键的C#技巧,旨在帮助初学者更好地理解和运用C#。 1. **Lambdas表达式**:Lambda表达式是C#中一种简洁的函数表示方式,常用于匿名方法。例如,你可以用它来定义事件处理程序或作为 LINQ ...
根据给定文件的部分内容,以下将详细解析与C#开发相关的几个技巧,这些技巧涵盖了从Flash与C#的交互、DataGrid操作、程序版本管理、强名称密钥处理到数据库查询等多个方面。 ### 技巧23:Flash与C#程序的交互 - **...
0883 对某期间的数据进行查询的几种方法 519 0884 NOT与谓词进行组合条件的查询 520 19.6 聚合函数 520 0885 聚合函数SUM的使用 520 0886 聚合函数AVG的使用 521 0887 如何使用聚合函数MAX 521 0888 ...
这里,我们将深入探讨几个关键的标签和文档主题,包括C#技术、技巧、socket编程、datagridview控件的使用以及水晶报表的创建。 【C#技术】C#是一种面向对象的编程语言,广泛应用于Windows桌面应用、Web应用、游戏...
接着,几个C#编程的小技巧.doc涵盖了一些实用的编程技巧,如利用lambda表达式简化代码,使用匿名方法快速定义回调,以及如何运用linq进行数据查询等。这些技巧能够使代码更加简洁、可读性强,同时提高开发效率。 在...
在提供的压缩文件中,我们看到几个可能相关的文件: 1. **CSHigh.exe.config** - 这通常是C#应用程序的配置文件,用于存储应用运行时的设置,如连接字符串、日志级别等。开发者可以通过修改它来调整应用程序的行为...
在压缩包子文件的文件名称列表中,我们看到以下几个文件: 1. `[Content_Types].xml`:这是Open Packaging Conventions(OPC)标准的一部分,用于定义压缩包内不同类型的文件应如何解析。在Microsoft Office文档中常见...
这一过程会生成Excel.dll、Office.dll和VBIDE.dll等几个重要的DLL文件,这些文件将被用于后续的C#代码编写中。 #### 创建Excel报表 接下来,使用C#和Visual Studio.NET环境创建一个简单的Windows应用程序,例如...
在探讨"C#学习 输入几个数值倒排"这一主题时,我们深入分析了如何在C#编程语言中实现数值数组的倒序排列。该知识点对于初学者掌握数组操作、输入输出控制以及基本算法逻辑具有重要意义。 ### 知识点一:数组的定义...
在C#读取Word文档的实现中,需要注意以下几点: 1. 需要在项目中添加对Microsoft Word 9.0 object library的引用,以便使用Word.ApplicationClass下的方法。 2. 需要使用Word.ApplicationClass下的方法来处理Word...
本章内容可能会涵盖以下几个关键知识点: 1. **C#语法基础**:C#的语法结构与C++和Java有诸多相似之处,包括变量声明、数据类型(如整型、浮点型、字符串、布尔型等)、常量、运算符、控制流(如if语句、for循环、...
综合上述内容,我们在C#编程中会遇到以下几种情况: 1. 使用接口来强制类实现特定的方法集,实现多态性。 2. 使用抽象类为子类提供共享的实现,并定义必须被子类实现的抽象方法。 3. 利用"ref"关键字进行按引用传递...
标题 "用C#2005编写的几个小游戏" 提供了关键信息,即这些小游戏是使用C#编程语言的2005版本开发的。C#是一种面向对象的编程语言,由微软公司开发,主要用于构建Windows应用程序、网络服务以及游戏。在C# 2005版本中...
C#的基础知识包括以下几个方面: 1. **语法结构**:C#的语法与C++和Java有相似之处,包括变量声明、数据类型(如int、string、bool)、控制流(如if语句、for循环、while循环)、函数定义和调用等。 2. **类和对象...
在C#编程技巧方面,书中可能会涵盖以下几个关键点: 1. **面向对象编程**:C#的核心是面向对象编程(OOP),包括类、对象、接口、继承、多态等概念。理解这些基础概念是成为熟练C#程序员的关键。 2. **异常处理**...