new有三种用法
来源:互联网 发布:暗黑3网络加速器 编辑:程序博客网 时间:2024/06/14 06:34
new有三种用法:
1. 运算符
2. 修饰符
3. 泛型中的new()约束
1. 作为运算符,new在普通不过了,也不多说了。
比如:MyClass myclass=new MyClass();
2. 作为泛型中的约束符new也很简单,
在泛型类型定义时,可以使用where指定一些约束,其中一种就是new约束。new 约束要求用作类型实参的类型必须带有公共无参构造器。
比如:class A<T> where T : new();
他的作用是告诉编译器只有带有公共无参构造器的类型才能用作T。
3. 重点是作为修饰符的new
在用作修饰符时,new 关键字可以替换基类方法。
例如:
public class BaseC
{
public int x;
public void Invoke() {}
}
public class DerivedC : BaseC
{
new public void Invoke() {}
}
在这个示例中,DerivedC.Invoke 并不是 BaseC.Invoke,有了new它会自己产生一个Invoke而非继承。其中的字段 x 不受影响,它还是会被继承的。
当然,对同一成员同时使用 new 和 override 是错误的,因为这两个修饰符在含义上相互排斥。使用 new 会用同样的名称创建一个新成员并使原始成员变为隐藏的,而 override 则扩展继承成员的实现。
在不隐藏继承成员的声明中使用 new 修饰符将会生成警告。
示例
在该例中,基类 BaseC 和派生类 DerivedC 使用相同的字段名 x,从而隐藏了继承字段的值。该示例演示了 new 修饰符的用法。另外还演示了如何使用完全限定名访问基类的隐藏成员。
using System;
public class BaseC
{
public static int x = 55;
public static int y = 22;
}
public class DerivedC : BaseC
{
// 这里重新生成了 x,而不是继承的x
new public static int x = 100;
static void Main()
{
Console.WriteLine(x);
// 100
Console.WriteLine(BaseC.x);
// 55
Console.WriteLine(y);
// 22
}
}
输出
100 55 22
- new有三种用法
- new用法
- new用法小结
- C++new的用法
- C# new 用法说明
- placement new的用法
- C++ new的用法
- new的一些用法。
- C++ new的用法
- new/delete 的用法
- placement new的用法
- placement new的用法
- C++new的用法
- new 的新用法
- at new 用法
- new 的用法
- C++ new 用法
- placement new的用法
- Windows下架设Subversion服务器
- DRB以及Rinda技术详解 (正在编写中...)
- dom4j修改节点属性及写入文件
- StringBuilder 和 String 的区别
- DeepClone与ShadowClone(downmoon)
- new有三种用法
- 不要过分设计
- C++ python STL 整数划分递归算法(即一个数分为几个数的和)
- 我的程序语言实践
- 我是不是也要总结一下我的2007
- C++ python STL 组合数递归算法(n个取m个数的组合数)
- 如何利用Grub命令启动损坏的Linux系统
- test
- 从内存中加载DLL