C#中不能通过new关键字创建实例的情况

  1. 抽象类(abstract)
cs 复制代码
public abstract class AbstractClass 
{
    // 不能直接new
    // AbstractClass obj = new AbstractClass(); // 编译错误
}
  1. 接口(interface)
cs 复制代码
public interface IMyInterface 
{
    // 不能直接new
    // IMyInterface obj = new IMyInterface(); // 编译错误
}

###实现接口的类可以通过new创建实例
// 实现接口的类
public class MyClass : IMyInterface 
{
    public void SomeMethod() { }
}

// 正确使用方式
IMyInterface obj = new MyClass(); // 通过实现接口的类创建实例
  1. 静态类
cs 复制代码
public static class StaticClass 
{
    // 不能new静态类
    // StaticClass obj = new StaticClass(); // 编译错误
}
  1. 带私有构造函数且没有提供创建实例方法的类
cs 复制代码
public class PrivateConstructorClass 
{
    // 私有构造函数
    private PrivateConstructorClass() {}

    // 没有提供创建实例的方法
    // PrivateConstructorClass obj = new PrivateConstructorClass(); // 编译错误
}
  1. 未指定具体类型的泛型类
cs 复制代码
public class GenericClass<T> 
{
    // 不能直接new泛型类型T
    // T instance = new T(); // 编译错误(除非T有无参构造函数)
}
  1. 没有无参构造函数的类(如果要求必须使用特定参数的构造函数)
cs 复制代码
public class ClassWithOnlyParameterizedConstructor 
{
    // 只有带参数的构造函数
    public ClassWithOnlyParameterizedConstructor(int x) {}

    // ClassWithOnlyParameterizedConstructor obj = new ClassWithOnlyParameterizedConstructor(); // 编译错误
}

注意:

  • 抽象类、接口、静态类是最典型的不能new的类型

  • 私有构造函数的类需要看是否提供了创建实例的方法

  • 泛型类的实例化依赖于具体的类型参数

相关推荐
Lost of 程序猿5 小时前
用 YARP 为 .NET 微服务搭一座“立交桥“:路由转发与生产配置实践
c#·asp.net
点纭8 小时前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#
用户788477316349 小时前
用 .NET MAUI 一套 C# 同时出 Windows 和 Android:哪些是真能共享,哪些是 marketing
c#
Lost of 程序猿10 小时前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net
林川~0120 小时前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
He BianGu1 天前
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
opencv·c#·wpf·halcon·机器视觉·visionmaster
tang_04271 天前
【Hi.Ltd 专题】第9期:Interop 配置互操作(JSON/INI/XML/YAML/注册表/扫码)
经验分享·c#·hi.ltd系列
tang_04271 天前
【Hi.Ltd 专题】第7期:Threading 采集线程、锁与 LRU 缓存
经验分享·c#·hi.ltd系列
A_nanda1 天前
C# 界面卡顿:从定位到根治
c#
2501_930707781 天前
使用C#代码为新创建的 Word 文档创建目录
c#·word