C#中using和new的用法

using

根据微软MSDN上的解释,c#中的using共有三种用途:引用命名空间、为命名空间或类型创建别名、使用using语句。

1、引用命名空间

用using来引用命名空间,可以直接在程序中使用命名空间下的类型而不必指定详细的命名空间,如:using System.ServiceModel等等。

2、为命名空间或类型创建别名

当一个类引用了不同的命名空间,但这些命名空间都包括了一个相同名字的类型时,可以使用using关键字来创建别名,这样会使代码更简洁。注意:并不是说两个类型名字重复,给其中一个使用了别名,另外一个就不需要用别名了,如果两个类型都要在该类中使用,则两个都需要用using来定义别名,如下:

 
 
  1. //命名空间MyApplication中包含一个类MyClass
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. namespace MyApplication
  6. {
  7. public class MyClass
  8. {
  9. public int Order = 1;
  10. }
  11. }
  12. //命名空间OtherApplication中也包含一个类MyClass
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Text;
  16. namespace OtherApplication
  17. {
  18. public class MyClass
  19. {
  20. public int Number = 1;
  21. }
  22. }
  23. //在程序中使用using为两个相同名字的类型定义别名
  24. using System;
  25. using System.Collections.Generic;
  26. using System.Text;
  27. using ClassA = MyApplication.MyClass;
  28. using ClassB = OtherApplication.MyClass;
  29. namespace UsingTest
  30. {
  31. class Program
  32. {
  33. static void Main(string[] args)
  34. {
  35. ClassA ca = new ClassA();
  36. ca.Order = 1;
  37. ClassB cb = new ClassB();
  38. cb.Number = 2;
  39. Console.WriteLine(ca.Order.ToString());
  40. Console.WriteLine(cb.Number.ToString());
  41. }
  42. }
  43. }

3、使用using语句,定义一个范围,在范围结束时清理对象。(注意:该对象必须实现了IDisposable接口)。其功能和try-->catch-->finally完全相同。如:

 
 
  1. string strCon = "Data Source=.;Initial Catalog=WCFPT;uid=sa;pwd=sa";
  2. using (SqlConnection sqlCon = new SqlConnection(strCon))
  3. {
  4. sqlCon.Open();
  5. }

注:这里SqlConnection默认实现了IDisposable接口,如果是自己写的类,那就要自己动手来实现IDisposable接口。

使用using语句需要注意的几点:

(1)对象必须实现IDisposable接口,否则编译器会报错误,如:

 
 
  1. //不能被编译
  2. using (string strMsg="Test")
  3. {
  4. Console.WriteLine(strMsg);
  5. }

(2)using对象检查是静态类型检查,并不支持运行时类型检查,因此如下错误也会出现编译错误:

 
 
  1. string strCon = "Data Source=.;Initial Catalog=WCFPT;uid=sa;pwd=sa";
  2. SqlConnection sqlCon = new SqlConnection(strCon);
  3. object objCon = sqlCon;
  4. //不能被编译
  5. using (objCon)
  6. {
  7. Console.WriteLine(objCon.ToString());
  8. }

但是可以通过“as”进行类型转换的方式来改进,如下:

 
 
  1. string strCon = "Data Source=.;Initial Catalog=WCFPT;uid=sa;pwd=sa";
  2. SqlConnection sqlCon = new SqlConnection(strCon);
  3. object objCon = sqlCon;
  4. //可以被编译
  5. using (objCon as IDisposable)
  6. {
  7. Console.WriteLine(objCon.ToString());
  8. }

(3)当同时需要释放多个资源时,并且对象类型不同,可以这样写:

 
 
  1. string strCon = "Data Source=.;Initial Catalog=WCFPT;uid=sa;pwd=sa";
  2. string strCmd = "delete from t_Employee";
  3. using (SqlConnection sqlCon = new SqlConnection(strCon))
  4. using (SqlCommand sqlCmd = new SqlCommand(strCmd, sqlCon))
  5. {
  6. sqlCon.Open();
  7. sqlCmd.ExecuteNonQuery();
  8. sqlCon.Close();
  9. }

如果对象类型相同,可以写到一起:

 
 
  1. using (Font MyFont1 =new Font("Arial",10.0f),MyFont2 = new Font("Arial",10.0f))
  2. {
  3. //do something
  4. }

(4)using关键字只是针对C#语句,对于VB等其他语言还没有对应的功能。

new

new的几种用法有:new运算符(用于创建对象和调用构造函数)、new修饰符(用于隐藏基类成员的继承成员)、new约束(用于在泛型声明中约束可能用作类型参数的参数的类型)等。

1、new运算符

(1)用于创建对象和调用构造函数,如:

MyClass classA=new MyClass();

(2)用于为值类型调用默认的构造函数,如:

int myInt=new int();

myInt初始化为0,它是int类型的默认值。该语句的效果等同于:int myInt=0;

(3)、不能重载new运算符。

(4)、如果new运算符分配内存失败,则它将引发OutOfMemoryException异常。

2、new修饰符

使用new修饰符可以显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#using有三种主要用法。首先,使用using命名空间可以简化代码编写,不需要指定详细的命名空间。例如,使用using System.Windows.Media;可以直接使用System.Windows.Media的类和方法,而不需要每次都写完整的命名空间。 其次,using语句也是using的一种用法。使用using语句可以在一定的范围内有效地释放资源。只要在using语句的作用域内,使用的对象实现了IDisposable接口,使用using语句结束时会自动调用Dispose方法释放资源。这种用法主要用于需要手动释放资源的类,比如数据库连接对象。例如,可以使用using(SqlConnection conn=new SqlConnection("连接字符串")){...}来在代码块结束时自动释放SqlConnection对象。 最后,using别名是using的第三种用法。使用using别名可以为命名空间或类型创建一个简短的别名,以便在代码更方便地使用。比如,可以使用using MyAlias = System.Windows.Media;来将System.Windows.Media命名空间简化为MyAlias,在代码使用MyAlias代替System.Windows.Media。这样可以减少代码的冗长,并提高代码的可读性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C# 使用using的三种方法](https://blog.csdn.net/fuhanghang/article/details/84453734)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [C#using用法](https://blog.csdn.net/chunchunlaila/article/details/105589780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值