Chinaunix首页 | 论坛 | 博客
  • 博客访问: 364196
  • 博文数量: 102
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 1116
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-29 16:21
文章分类

全部博文(102)

文章存档

2014年(10)

2011年(1)

2008年(2)

2007年(89)

我的朋友

分类: C#/.net

2014-07-01 20:16:24

 

1、 New操作符功能

1) 作为运算符,创建对象、调用构造函数。

对于值类型使用New操作时,执行的是赋初值操作,对于类来说,需要完成分配内存和初始化两个步骤。值类型分配于线程的堆栈(stack)上,其变量本身就保存其实值,因此也不受GC的控制,;而引用类型变量,包含了指向托管堆的引用,内存分配于托管堆(managed heap)上,内存收集由GC完成。 

2) 作为修饰符,用于隐藏继承中基类的成员。类似于VB中的shadow修饰符。

3) 作为约束,用于在泛型中可能用作类型参数的参数的类型。

注意:new作为约束和其他约束共存时,必须在最后指定。其定义方式为:

 class Genericer where T : new()
    {

        public T GetItem()
        {

            return new T();

        }

}

实现方式:

 class MyCls

{

        private string _name;

        public string Name

        {

            get { return _name; }

            set { _name = value; }

        }

        public MyCls()

        {

            _name = "Emma";

        }

    }

  class MyGenericTester

{

        public static void Main(string[] args)

        {

            Genericer MyGen = new Genericer();

            Console.WriteLine(MyGen.GetItem().Name);

        }

    }

简言之,使用override重写基类方法,通过父类引用一样只能看到子类的方法,使用New重写基类方法,父类子类各自引用对应方法。不能重写非虚方法和静态方法。

在子类中New父类中的方法,父类中的方法不一定是虚类型,在子类中override父类中的方法,父类中的方法一定得是虚类型。

2、 Abstract修饰符

Abstract方法一定要被override,只有当类是abstract的时候,才可以声明abstract方法;因为抽象方法没有实现,因此子类必须override,不能New

3、 Sealed关键字

Sealed关键字必须与override连用,也就是说实现sealed方法的类的父类必须实现了此方法,该关键字有两个作用(密封类不能被继承;密封方法重写基类中的方法,但其本身不能在派生类中进一步重写)

4、 Internal关键字

类似于VB中的friend

5、 使用括号进行强制类型转换或者使用as关键字实现同样功能,但两者实现机制不同,前者生成的IL指令是castclass,后者则是isinst,如果转换失败,前者则在运行时抛出异常,后者则是简单的返回一个null值。VB中使用Ctype或者trycastdirectcast

6、 值类型

C#要求必须对值类型变量初始化才能使用,VB则自动添加调用构造函数的指令,不必显示初始化。

7、 关于构造函数和析构函数函数

CLR自动管理类的析构。在继承体系中,初始化一个继承类时,依次从最顶级的基类构造函数开始执行,析构的时候则以相反顺序执行。

8、 C#中可以使用指针,但是需要加上unsafe标识符,如果要操作其中的某些数据,可能还需要加上fixed关键字防止CLR的自动回收机制,因为无法确定CLR何时回收;

9、 C#中的操作符重载,类型转换:

Public static T operator +(T t1,T t2)

Public static int operator int(T t);

10、      C#中的索引器定义

Public  static T this[int index]{return T;}

阅读(390) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~