欢迎来到入门教程网!

C#教程

当前位置:主页 > 软件编程 > C#教程 >

C#中new的用法及与override的区别分析

来源:本站原创|时间:2020-01-10|栏目:C#教程|点击:

C#中new的用法有三种:

(1)new是运算符,用于创建对象和调用构造函数。如Class1=new Class1();也可以为值类型调用默认的构造函数如int a=new int();此时a=0.

(2)new是修饰符,用于隐藏基类成员的继承成员。override不能隐藏积累成员的继承成员。如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace A
{
  
  class Program
  {
    abstract public class Test
    {      
      public virtual void Prinf() 
      {
        Console.WriteLine("Abstract Printf...");
      }
    }
    public class Class1 : Test
    {
      
      public override void Prinf() 
      {

        Console.WriteLine("Class One Override Printf...");
      }
       
    }

    public class Class2 : Test
    {
      public new void Prinf()
      {

        Console.WriteLine("Class Two New Printf...");
      }
    }
 
    
    static void Main(string[] args)
    {

      Class1 cls1 = new Class1();
      Class2 cls2 = new Class2();
      cls1.Prinf();
      cls2.Prinf();
      ((Test)cls1).Prinf();
      ((Test)cls2).Prinf();

      Console.ReadLine();    

    }
  }
}

运行结果表明:new修饰符隐藏了重写方法,通过将派生对象转为为基类对象,调用了基类的方法。而override则是完全重写了方法,即便是转为基类对象也调用的也是派生类的重写方法。

即:new隐藏的基类方法,override重写基类方法。

(3)new是约束。用在泛型中添加类型的约束。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace A
{
  class Test<T>
    where T : new()//定义类型T的约束,表示T类型必须有不带参数的构造函数
  {
    public T GetItem()
    {
      return new T();//如果不添加new()约束,编译错误:变量类型“T”没有 new() 约束,因此无法创建该类型的实例
              //想一下,T类型不知道,编译器不知道分配多大的空间,所以会通过反射技术实现
    }
  }
  class TClass
  {
    private int a;
    
    public TClass() //如果不添加无参构造函数,编译错误:TClass必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法“A.Test<T>”中的参数“T”
    {

    }
    public TClass(int a)
    {
      this.a = a;
    }
  }

  class Program
  {
  
    static void Main(string[] args)
    {
      Test<TClass> test = new Test<TClass>();

      Console.ReadLine();    

    }
  }
}

注释:参考http://msdn.microsoft.com/zh-cn/library/sd2w2ew5.aspx

上一篇:WinForm使用正则表达式提取内容的方法示例

栏    目:C#教程

下一篇:C#实现带百分比的进度条功能示例

本文标题:C#中new的用法及与override的区别分析

本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/5712.html

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 脚本教程网 版权所有