没有合适的资源?快使用搜索试试~ 我知道了~
王牌9 优秀程序员之路——C# 开发经验及技巧大汇总
需积分: 45 7 下载量 165 浏览量
2010-09-05
22:13:01
上传
评论
收藏 265KB PDF 举报
温馨提示
试读
15页
C#从入门到精通的王牌九: 优秀程序员之路——C# 开发经验及技巧大汇总
资源推荐
资源详情
资源评论
优秀程序员之路——C#开发经验及技巧大汇总
王牌9
1
优秀程序员之路——C#开发经验及技巧大汇总
1. 用接口代替类用于参数
接口是诚实的,能做什么不能做什么一目了然,从来没有什么欺瞒。不像类,可能拥有
其接口没有定义的方法 或属性,而编程时则有效要避免用到这些方法和属性。在定义方法
时,对于我们需要的对象参数,我们需要的只是它这个对象的功能 或作用的说明,而接口
洽洽就可以提供这些了。使用接口代替类用于参数,凡是实现这个接口的类都可以用作参数
实例,显而易见接 口拥有更大的灵活性。
对于方法的返回值,如果要求返回的对象具有某个功能,而这个功能是在接口中声明的,
则只需返回接口即可 。
原则是:参数的传入与传出要尽可能提高其抽象性、扩大其涵盖范围。
2. P/Invoke 是什么?
在受控代码与非受控代码进行交互时会产生一个事务(transition) ,这通常发生在使用
平台调用服务(Platform Invocation Services),即 P/Invoke
如调用系统的 API 或与 COM 对象打交道,通过 System.Runtime.InteropServices 命名
空间,虽然使用 Interop 非常方便,但据估计每次调用事务都要执行 10 到 40 条指令,算
起来开销也不少,所以我们要尽量少调用事务,如果非用不可,建议本着一次调用执行多个
动作,而不是多次调用每次只执行少量动作的原则。
3. 怎样从一个 form 传递数据到另一个 form?
假设 Form2 的数据要传到 Form1 的 TextBox。
在 Form2:
// Define delegate
public delegate void SendData(object sender);
// Create instance
public SendData sendData;
在 Form2 的按钮单击事件或其它事件代码中:
if(sendData != null)
{
sendData(txtBoxAtForm2);
}
this.Close(); //关闭 Form2
在 Form1 的弹出 Form2 的代码中:
C#
从入门到精通
2
Form2 form2 = new Form2();
form2.sendData = new Form2.SendData(MyFunction);
form2.ShowDialog();
====================
private void MyFunction(object sender)
{
textBox1.Text = ((TextBox)sender).Text;
}
4. 强制类型转换与 as 类型转换的区别
当类型转换非法时,强制类型转换将抛出一个 System.InvalidCastException 异常,而 as
不会抛出异常,它返回一个 null 值。
5. 怎样从 Flash 调用外部程序,如一个 C#编译后生成的.exe?
fscommand("exec", "应用程序.exe");
必须把 flash 发布为.exe
必须在 flash 生成的.exe 文件所在目录建一个名为 fscommand 的子目录,并把要调用的
可执行程序拷贝到那里。
6.使用用 SqlConnection 连接 SQL Server
//加入命名空间
using System.Data.SqlClient;
//连接数据库
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = "user id=sa;password=sinofindb;initial
catalog=test;datasource=127.0.0.1;Connect Timeout=30";
myConnection.Open();
7. 十进制数转成十六进制字符串
int num =123;
string str = Convert.ToString(num,16);
十六进制字符串转十进制数
string str = "7b";
int num = Convert.ToInt32(str,16);
其它进制也是一样,只要把 16 改进 2 或 8 或 10 就可以了.
8. 关于泛型集合
优秀程序员之路——C#开发经验及技巧大汇总
王牌9
3
用 Array,ArrayList,Dictionary 等存储对象集合,面临的不只是拆装箱性能损耗的问题。
从系统架构角度讲, 所有对象对象都应该是强类型的。为了解决这个问题,从.Net2 开始,
便有了泛型。看如下代码:
public class Mobile
{
private ArrayList friends= new ArrayList();//这里用 ArrayList 便不足取
public void Add (IFriend f)
{
friends.Add(f)
}
private void SayBless()
{
for (int i = 0; i < friends.Count; i++)
{
IFriend f riend=(IFriend )friends[i];//这里拆装时,必须知道其元素的类型是 IFriend
friend.Say ();
}
}
}
这一条小技巧的建议便是:使用泛型集合避免显式类型转换。如果您的代码中有显式转
换,或者有 as 操作,可 能需要重新考虑一下架构。as 操作符用起来看似优雅,但若用于类
型转换不用也罢。
12. 如何取得安装操作系统输入的用户姓名和公司名称:
Microsoft.Win32.RegistryKey cmicRegKey=Microsoft.Win32.Registry.CurrentUs
er.OpenSubKey("Software");
cmicRegKey=cmicRegKey.OpenSubKey("Microsoft");
cmicRegKey=cmicRegKey.OpenSubKey("MS Setup (ACME)");
cmicRegKey=cmicRegKey.OpenSubKey("User Info");
object cmicCompany = cmicRegKey.GetValue("DefCompany");
object cmicUser = cmicRegKey.GetValue("DefName");
13. C#推荐的命名方法。
(1) 避免容易被主观解释的难懂的名称,如方面名 AnalyzeThis(),或者属性名 xxK8。
这样的名称会导致多义性。
(2) 在类属性的名称中包含类名是多余的,如 Book.BookTitle。而是应该使用 Book.Title。
(3) 只要合适,在变量名的末尾或开头加计算限定符(Avg、Sum、Min、Max、Index)。
(4) 在变量名中使用互补对,如 min/max、begin/end 和 open/close。
剩余14页未读,继续阅读
资源评论
迷瞪迷瞪
- 粉丝: 4
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功