游乐游手机版
首页/业界动态/文章详情

在 C# 中 new 关键字据说有三种用法

时间:2026-04-22 16:40
本文介绍了new关键字的三种用法,下面我们来看看三种的具体使用。 说到C 里的new关键字,大家肯定不陌生,它大概是日常编码中间出现频率最高的关键字之一了。通常,我们用它来创建一个新的对象实例。但你可能不知道,这个看似简单的new,其实还有另外两副“面孔”:它既可以作为修饰符来使用,也能在泛型中充当

本文介绍了new关键字的三种用法,下面我们来看看三种的具体使用。

说到C#里的new关键字,大家肯定不陌生,它大概是日常编码中间出现频率最高的关键字之一了。通常,我们用它来创建一个新的对象实例。但你可能不知道,这个看似简单的new,其实还有另外两副“面孔”:它既可以作为修饰符来使用,也能在泛型中充当约束条件。接下来,我们就一起把这三种用法的门道摸清楚。

一、NEW关键字作为运算符

作为运算符的new,其核心任务就是创建类型的新实例。这是我们最熟悉的场景,比如实例化一个类、创建一个数组,甚至是初始化匿名类型,都离不开它。看几个典型的例子:

//new一个配置类
var configuration = new ConfigurationBuilder();

//创建一个字典
var dict = new Dictionary();
dict["first"] = 10;

//创建数组
var numbers = new int[3];
numbers[0] = 10;

//匿名类型实例化
var example = new { Greeting = "Hello", Name = "World" };

二、NEW关键字作为修饰符

new扮演修饰符的角色时,它的作用就变得微妙了——用于显式隐藏从基类继承而来的成员。这意味着,在实现多态时,如果子类成员用new修饰,那么通过父类引用去调用,将不会触发子类的这个版本。通过下面的例子,你能看得更明白:

//新建父类
class people
{
    public string name { get; set; }
    public virtual void say()
    {
        Console.WriteLine("hello people");
    }
}

//男人
class man : people
{
    public override void say()
    {
        Console.WriteLine("hello man");
    }
}

//女人
class woman : people
{
    //这个方法被显示隐藏了
    public new void say()
    {
        Console.WriteLine("hello woman");
    }
}

static void Main(string[] args)
{
    //这里不影响调用
    woman w = new woman();
    w.name = "小花";
    w.say();

    //这里隐藏了子类,会调用父类
    people p = new woman();
    p.name = "小花";
    p.say();

    //这里优先调用子类 如果找不到重写会调用父类
    people p2 = new man();
    p2.name = "小王";
    p2.say();
}

运行上面的代码,打印结果如下:

三、NEW关键字作为泛型中约束

最后,new还能在泛型领域大显身手。作为约束条件时,new()要求泛型类型参数必须有一个公共的无参数构造函数。有个重要的前提:该类型不能是抽象类。我们来看一个具体的应用实例:

//新建一个类
public class People
{
    private string name;
    private int id;

    public People()
    {
        name = "张山";
        id = 0;
    }

    public People(string _name, int _id)
    {
        name = _name;
        id = _id;
    }

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public int ID
    {
        get { return id; }
        set { id = value; }
    }
}

//使用new约束
class ItemFactory where T : new()
{
    public T GetNewItem()
    {
        return new T();
    }
}

//输出
static void Main(string[] args)
{
    ItemFactory PeopleFactory = new ItemFactory();
    //此处编译器会检查People是否具有公有的无参构造函数。否则会报错
    Console.WriteLine("{0}'ID is {1}.", PeopleFactory.GetNewItem().Name, PeopleFactory.GetNewItem().ID);
}
//打印结果为:张山'ID is 0.


来源:https://www.51cto.com/article/840406.html
上一篇Strace 实战:一行命令看穿任何程序在干什么,排查线上问题的瑞士军刀 下一篇美国得州一只鸭子被自动驾驶汽车碾死,居民怒了
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
长安汽车明年一季度发布首款车载人形机器人小安
业界动态 · 2026-06-29

长安汽车明年一季度发布首款车载人形机器人小安

长安汽车公布机器人战略,采用“1+N+X”布局,联合头部伙伴攻克大脑、能源、驱动技术。人形机器人“小安”身高169cm,体重69kg,移动速度0 8m s,具备40个自由度,续航超2小时。预计明年一季度发布首款车载组件机器人,已在广州车展展示。

中国信科刷新光通信世界纪录 每秒可下载1.4万部4K电影
业界动态 · 2026-06-29

中国信科刷新光通信世界纪录 每秒可下载1.4万部4K电影

3月25日,光通信领域迎来又一个里程碑:中国信科集团光通信技术和网络全国重点实验室联合鹏城实验室、烽火藤仓光纤科技有限公司,成功实现了2 5Pb s 24芯光纤超大容量实时光传输,再次刷新了世界纪录。 这一研究成果不仅入选国际顶级光通信会议OFC(2026)并荣获“高分论文”称号,还受国际权威SCI

美国调查18万辆特斯拉Model3车门应急释放装置易找性
业界动态 · 2026-06-29

美国调查18万辆特斯拉Model3车门应急释放装置易找性

美国国家公路交通安全管理局对约17 9万辆2024款特斯拉Model3启动缺陷调查,焦点在于车门应急释放装置是否不易找到且标识不清。该调查源于一份缺陷请愿,不意味着立即召回,但可能引发后续监管措施。

doc个人图书馆停服 创始人称无偿转让失败
业界动态 · 2026-06-29

doc个人图书馆停服 创始人称无偿转让失败

运营长达20年,累计服务8000万用户的360doc个人图书馆,最终还是迎来了谢幕时刻。2026年5月1日,这个承载着无数用户收藏记忆的知名平台将正式停止服务——关停原因并非用户流失,而是始终未能寻得一位能够安全接管的合适人选。 创始人蔡智在告别信中坦言,近两个月来,他一直在尝试将360doc无偿转

年Q1随身WiFi实测安全靠谱高性价比机型推荐
业界动态 · 2026-06-29

年Q1随身WiFi实测安全靠谱高性价比机型推荐

2025年10月,艾瑞咨询正式授予飞猫“AI WiFi品类开创者”认证,紧接着CIC也将其认定为“多网融合自由切换技术服务首创者”。这些权威认证背后,折射出一个清晰的市场趋势:移动办公、户外出行、宿舍上网等场景的需求正在快速增长,随身WiFi几乎已成为不少用户的刚需装备。但问题也随之而来——网络卡顿