`

近期C#的一些知识点

    博客分类:
  • C#
 
阅读更多

1、using(){}的用法

using语句
    using 语句允许程序员指定使用资源的对象应当何时释放资源。using 语句中使用的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。
    ①可以在 using 语句之中声明对象。
       Font font2 = new Font("Arial", 10.0f);
      using (font2)
      {
          // use font2
      }
    ②可以在 using 语句之前声明对象。
       using (Font font2 = new Font("Arial", 10.0f))
      {
          // use font2
      }
    ③可以有多个对象与 using 语句一起使用,但是必须在 using 语句内部声明这些对象。
        using (Font font3=new Font("Arial",10.0f), font4=new Font("Arial",10.0f))
      {
          // Use font3 and font4.
      }

使用规则
    ①using只能用于实现了IDisposable接口的类型,禁止为不支持IDisposable接口的类型使用using语句,否则会出现编译错误;
   ②using语句适用于清理单个非托管资源的情况,而多个非托管对象的清理最好以try-finnaly来实现,因为嵌套的using语句可能存在隐藏的Bug。内层using块引发异常时,将不能释放外层using块的对象资源;
   ③using语句支持初始化多个变量,但前提是这些变量的类型必须相同,例如:
        using(Pen p1 = new Pen(Brushes.Black), p2 = new Pen(Brushes.Blue))
      {
          //
      }
     ④针对初始化对个不同类型的变量时,可以都声明为IDisposable类型,例如:
        using (IDisposable font = new Font("Verdana", 12), pen = new Pen(Brushes.Black))
      {
          float size = (font as Font).Size;
          Brush brush = (pen as Pen).Brush;
      }

using实质
    在程序编译阶段,编译器会自动将using语句生成为try-finally语句,并在finally块中调用对象的Dispose方法,来清理资源。所以,using语句等效于try-finally语句,例如:
    Font f2 = new Font("Arial", 10, FontStyle.Bold);
  try
  {
      //执行文本绘制操作
   }
  finally
  {
      if (f2 != null) ((IDisposable)f2).Dispose();
  } 

2、string.Empty

string s; 
string s=null; 
string s=""; 
string s=String.Empty; 的区别

null名词解释:(MSDN)null是一个字面文本,它代表空引用,即引用变量没有引用( 指向)到任何对象,它是引用类型的默认值。
 同样会在栈上保存一个地址,这个地址也占4字节,但是这个地址是没有明确指向的,它哪也不指,其内容为0x00000000。 

string s; 
该语句表示只是声明了一个引用变量,但是并没有初始化引用,所以对变量s的任何操作(除了初始化赋值外)都将引发异常。 

string s=null; 
该语句表示声明了一个引用变量并初始化引用,但是该引用没有指向任何对象,但可以把它作为参数传递或其它使用,但是不能调用它作为对象的方法 ,如toString,getHashCode等。 

string s=""; 
该语句表示声明 并引用到一个对象,只不过这个对象为0个字节 .所以既然有了对象,就可以调用对象的方法, 

string s=String.Empty; 
String中Empty的源码定义: 
publci static readonly string Empty = ""; 
如果你不知道static readonly的作用,自己搜下,我简单说下为什么String.Empty可能会比用String s = ""高效:

需要知道的知识: 在C#中,所有的字符串都是以HashTable来存放的,key是字符串,value字符串的地址,当用string str = ""的时候,首先会去HastTable中查找""然后,再将""的地址赋给str,这经历了两个过程。而string.Empty,相当于,首先我定义 了一个引用,那么这个引用的地址是指向""的实际地址,所以,我用string str = string.Empty的时候,相当于我只是把""的实际地址赋给str,这样省去了在Hashtable中的定位过程,所以在一定程度上提高的效率。

对于网络很多人都认为定义string s=String.Empty没有分配空间,而string s="";分配了空间,实际上都没有分配空间,这其中还涉及一个字符串的内存的驻留机制,我觉得在C#中的内存驻留机制中,已经存在一个""空字符串,所以无论你是string s=String.Empty和string s=""都是不会创建一个新的空间,只是引用,引用""空字符串的内存位置。

http://www.bitscn.com/pdb/dotnet/201003/181883.html

 

 3、partial修饰符

Partial是局部类型的意思。允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类

局部类型适用于以下情况:
(1) 
类型特别大,不宜放在一个文件中实现。
(2) 
一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。
(3) 
需要多人合作编写一个类。

局部类型的限制
(1) 
局部类型只适用于类、接口、结构,不支持委托和枚举。
(2) 
同一个类型的各个部分必须都有修饰符 partial
(3) 
使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。
(4) 
一个类型的各个部分必须被同时编译。

3. 
局部类型的注意点

(1) 
关键字partial是一个上下文关键字,只有和 classstructinterface 放在一起时才有关键字的含义。因此partial的引入不会影响现有代码中名称为partial的变量。
(2) 
局部类型的各个部分一般是分开放在几个不同的.cs文件中,但C#编译器允许我们将他们放在同一文件中。

4. 
局部类型的应用特性
在局部类型上的特性具有累加效应。

[Attribute1, Attribute2("Hello")]
partial class Class1{}

[Attribute3, Attribute2("Exit")]
partial class Class1{}


相当于

[Attribute1, Attribute2("Hello"), Attribute3, Attribute2("Exit")]
class Class1 {}


注:Attribute2属性允许在类上多次使用。

5. 
局部类型上的修饰符

(1) 
一个类型的各个部分上的访问修饰符必须维持一致性。
(2) 
如果一个类型有一个部分使用了abstract修饰符,那么整个类都将被视为抽象类。
(3) 
如果一个类型有一个部分使用了 sealed 修饰符,那么整个类都将被视为密封类。
(4) 
一个类的各个部分不能使用相互矛盾的修饰符,比如不能在一个部分上使用abstract,又在另一个部分上使用sealed

6. 
局部类型的基类和接口

(1) 
一个类型的各个部分上指定的基类必须一致。某个部分可以不指定基类,但如果指定,则必须相同。
(2) 
局部类型上的接口具有累加效应。

partial class Class2: Iinterface1, Iinterface2 {}
partial class Class2: Iinterface3 {}
partial class Class2: Iinterface2 {}


相当于

class Class2: Iinterface1, Iinterface2, Iinterface3 {}

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    C# 考试知识点总汇

    c#知识点c#知识点c#知识点c#知识点c#知识点c#知识点c#知识点

    c#基础知识点大全

    c#基础知识点大全,分条总结。另附winform,css,HTML知识点

    C#语言基础知识点大全分享

    C#语言基础知识点大全分享C#语言基础知识点大全分享C#语言基础知识点大全分享C#语言基础知识点大全分享C#语言基础知识点大全分享C#语言基础知识点大全分享C#语言基础知识点大全分享C#语言基础知识点大全分享C#语言...

    C#教程 C#笔记 C#高级 C#知识点.rar

    本教程集合了我工作和学习过程中积累的C#各种知识点,旨在帮助你深入理解和掌握C#的基础及高级特性。 1. **C#基础知识** - **变量与数据类型**:包括基本的数据类型(如int, string, bool等)以及引用类型。理解...

    C#编程知识点总结1-10C#编程知识点总结

    在C#编程中,掌握各种知识点对于提升编程能力至关重要。以下是对给定文件名的C#编程知识点的详细总结: 1. **C#难点总结**:C#编程中可能存在一些复杂的概念和技术,如多线程、内存管理、委托与事件、LINQ查询以及...

    C#经典知识点源码总结

    在C#编程语言的世界里,每一个程序员,无论新手还是老手,都需要不断地学习和掌握新的知识点,以便在软件开发的道路上不断进步。"C#经典知识点源码总结"这一资源,正是为了帮助开发者们巩固基础,提升技能而设计的。...

    C#编程知识点总结11-20C#编程知识点总结

    以下是对给定文件名的C#编程知识点的详细总结: 1. **常量(const)**(《编程知识总结》5—浅谈const.txt) 在C#中,常量是不可更改的值。一旦声明并赋值,就不能再进行修改。`const`关键字用于声明常量,它要求在...

    C#高级编程知识点总结

    C#高级编程涵盖了许多关键知识点,这包括了.NET体系结构、托管执行环境、组件使用、部署与版本控制、对象和类型等多个方面。首先,我们来深入理解.NET框架,它是.NET平台的基础,由公共语言运行库(CLR)和.NET ...

    C#编程知识点总结41-50C#编程知识点总结

    在C#编程中,有很多关键知识点对于理解和提升编程能力至关重要。以下是对这些知识点的详细解析: 1. **C#中的随机函数应用**:在C#中,生成随机数通常使用`System.Random`类。通过实例化这个类并调用其`Next()`方法...

    c#概念个人总结知识点

    该资源为自己在学习c#时候,总结和需要注意的知识点,没有对知识点进行详解,只是说明了c#有这么个东西,概括的不全!

    c# 各个知识点 课件

    本课件详细讲解了C#中的各个基础知识,旨在帮助初学者快速入门并掌握C#编程。 首先,从基础语法开始,C#具有与C++和Java类似的结构,但也有其独特的特点。变量声明、数据类型(如int、string、bool等)以及控制流...

    C#各大知识点回顾

    C#的知识点回归,有助于学习理解C#的各大知识点,对于学过C#的有助于回顾和温习的作用。

    ACCP5.0C#重要知识点

    ACCP5.0C#重要知识点ACCP5.0C#重要知识点ACCP5.0C#重要知识点ACCP5.0C#重要知识点ACCP5.0C#重要知识点ACCP5.0C#重要知识点ACCP5.0C#重要知识点ACCP5.0C#重要知识点ACCP5.0C#重要知识点ACCP5.0C#重要知识点

    C#基础知识全篇巩固

    对于已经有C#开发知识的研发人员的基础知识进行巩固,比较好的全面过滤。

    C#知识点总结适用初中级开发程序员

    本篇文章将针对“C#知识点总结”进行深入探讨,适用于初中级开发程序员的学习和进阶。 首先,我们来看看C#的基础部分。C#语言的基础语法与C++和Java有诸多相似之处,包括变量声明、数据类型(如int、string、bool等...

    c#委托 知识点归纳

    这是我学习委托后进行的总结,一个思维导图,很清晰,你值得拥有`

    c#大一上学期书中的全部知识点

    以下是对标题和描述中提及的一些核心知识点的详细说明: 1. **常量与变量**:常量是不可改变的值,如π或圆周率,在程序运行过程中其值始终保持不变。变量则可以存储和修改数据,是程序中数据的基本载体。在C#中,...

    C#开发必备基础知识

    学习这些知识点,开发者将能够: - 使用C#进行基本的程序设计,包括变量、常量、运算符、控制结构(如if、switch、for、while)。 - 创建和管理对象,理解面向对象编程的核心概念,如继承、多态、封装。 - 掌握异常...

    C#编程知识点总结51-60C#编程知识点总结

    以下是对标题和描述中提到的"C#编程知识点总结51-60"部分的一些关键知识点的详细解释,以及根据提供的压缩包子文件名,我们可以推测出的一些相关知识点: 1. **自定义窗体形状**: 在《编程知识总结》42—c#自定义...

Global site tag (gtag.js) - Google Analytics