首页 游戏 软件 资讯 排行榜 专题
首页
业界动态
在 C# 中 new 关键字据说有三种用法

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

热心网友
59
转载
2026-04-22

本文介绍了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
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

马中新能源论坛探讨产业合作与人才培养新路径
科技数码
马中新能源论坛探讨产业合作与人才培养新路径

5月12日,马来西亚吉隆坡成功举办了一场具有前瞻性的行业盛会——中国-马来西亚电动汽车、电池技术与新能源人才创新发展论坛。来自两国政府部门、领军企业、顶尖高校及国际组织的代表共聚一堂,深入交流了在未来产业协同、清洁能源技术创新及高端人才培养等核心领域的合作路径与机遇。 马来西亚第一副总理兼乡村及区域

热心网友
05.14
智元APC香港观察:具身智能如何成为先进生产力单元
科技数码
智元APC香港观察:具身智能如何成为先进生产力单元

具身智能要迈过的第一道硬门槛,从来都是量产。 过去几年,全球人形机器人行业反复印证了这一点:舞台演示可以很快,工程验证可以很快,视频传播也可以很快。但当一台机器人要从实验室走向产线,再走向客户现场,问题的复杂度会呈指数级上升。 特斯拉的Optimus就是一个典型的参照系。马斯克多次表达过对Optim

热心网友
05.14
AI回答第一个字就暴露真假?识别AI胡说八道的关键信号
科技数码
AI回答第一个字就暴露真假?识别AI胡说八道的关键信号

向朋友问路时,如果对方清楚路线,通常会立刻回答“直走然后左转”。但如果对方并不确定,往往会先停顿一下,犹豫地说“呃……好像是……往那边?”。这个开口前的短暂迟疑,往往比最终给出的答案更能说明问题——对方是否真的知道答案。 近期,美国天普大学计算机与信息科学系的一项研究,正是捕捉到了AI回答问题时类似

热心网友
05.14
浙江大学万能分割学习器技术原理与应用场景详解
科技数码
浙江大学万能分割学习器技术原理与应用场景详解

这项由浙江大学、华南理工大学、南京大学和北京大学联合开展的前沿研究,于2026年4月正式发布,其论文预印本编号为arXiv:2604 24575。 图像分割技术听起来或许有些专业,但它早已深度融入我们的日常生活。无论是智能手机拍摄的背景虚化人像、AI系统在CT影像中精准勾勒病灶轮廓,还是自动驾驶汽车

热心网友
05.14
比亚迪大汉纯电续航1000公里对标56E车型参数曝光
科技数码
比亚迪大汉纯电续航1000公里对标56E车型参数曝光

“大唐”预售热潮尚未平息,“大汉”已蓄势待发,比亚迪王朝系列正以前所未有的攻势,叩响高端市场的大门。 在北京车展引发轰动的比亚迪大唐,预售订单已迅速突破10万台大关,彰显了市场对比亚迪高端产品的强烈期待。而最新信息显示,汉家族即将迎来一位重磅新成员——“大汉”,这款定位D级旗舰的轿车,目标直指20-

热心网友
05.14