首页
学习
活动
专区
圈层
工具
发布

C# - 在构造函数中键入参数 - 没有泛型

在 C# 中,构造函数不支持泛型。泛型是一种在编译时执行类型替换的技术,允许在编译时为类型参数提供具体类型。构造函数是在创建对象时被调用的特殊方法,它负责初始化对象的状态。

在 C# 中,可以使用类型参数来定义泛型类和泛型方法。泛型类和泛型方法允许在编译时为类型参数提供具体类型。这样,可以编写可重用的代码,而不必为每种类型编写单独的实现。

例如,可以定义一个泛型类来表示栈:

代码语言:csharp
复制
public class Stack<T>
{
    private T[] _elements;
    private int _count;

    public Stack(int capacity)
    {
        _elements = new T[capacity];
        _count = 0;
    }

    // 其他栈操作方法
}

在这个例子中,T 是一个类型参数,表示栈中元素的类型。在创建栈对象时,可以为 T 提供具体类型,例如:

代码语言:csharp
复制
var intStack = new Stack<int>(10); // 创建一个整数栈
var stringStack = new Stack<string>(10); // 创建一个字符串栈

总之,构造函数不支持泛型,因为构造函数是在创建对象时被调用的特殊方法,它负责初始化对象的状态。而泛型是一种在编译时执行类型替换的技术,允许在编译时为类型参数提供具体类型。如果需要在构造函数中使用泛型,可以考虑将泛型类型参数移动到类定义中,并在构造函数中使用具体类型。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#中的泛型(类型参数的约束)

因为我们的数组中存储的元素类型是不确定的,所以这里我们用到了泛型,其中where T : strut子句约束参数类型T必须为值类型。当然这个程序我们不使用泛型,直接定义Object类型的数组也可以。...下面重点说说C#中泛型类型参数的约束: 在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制。 如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。...T:new() 类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。 T: 类型参数必须是指定的基类或派生自指定的基类。...于是,我想能不能写一个简单的泛型类,其中里面实现对数值类型的加减乘除四则运算,遇到的问题是 :where子句后面的约束怎么写,我查看的数值型的类Int32等等,它们的基类是Object,如果直接定义一个泛型参数...最后,在MSDN上找了找资料,发现C#中时没办法实现的。 如果有朋友,发现了解决问题的方法,请分享下!愿共同学习!

4.2K60
  • C# 基础知识系列- 5 反射和泛型

    使用 做标记,中间写类型,表示这是一个泛型为XXX的泛型类。通常与其他语言不同的地方是,C#的泛型支持所有类型,意思就是在没有额外声明的时候,可以使用任意类型作为泛型参数传递。...泛型方法 C#也可以声明一个方法为泛型方法,方法的泛型声明是声明在方法名的后面,参数列表的前方。...泛型约束和泛型标记 约束 在实际开发过程中,我们会对一些泛型类的泛型参数进行类型约束,那么泛型约束应该怎么写呢,看示例: public void Demo(T arg) where T : 约束内容...在C#里有个很有意思的地方,那就是泛型标记。...第四条:获取构造函数,返回的是一个类型是ConstructorInfo的数组,表示所有的构造方法,不过可惜的是,没有根据名字检索的方法了,因为构造方法就一个名。

    1.6K60

    一文搞定泛型知识

    一、当 C# 没有泛型 在 .NET 2.0 以前没有泛型的时候,开发人员一直在使用 System.Collections.Stack 类,它是一个栈类型的集合对象。...1.构造函数 我们在开发中经常用到构造函数,在泛型类和泛型结构中同样也适用构造函数。...泛型类/结构的构造函数和普通类/结构的构造函数是一模一样的,不需要类型参数只需要按照普通类/结构的构造函数定义方法定义即可。...2.结构与接口 在 C# 中不仅仅存在泛型类,还存在泛型接口和泛型结构。...3.默认值 当我们需要在泛型类的构造函数中部分属性进行初始化,而其他属性不进行初始化,但是我们在开发中无法确定传入泛型类中的类型参数是什么,因此我们也无法通过具体的值设置默认值。

    1.1K10

    C#泛型详解

    有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的。读完本篇文章,你会对泛型有更深的了解。...因为类Node中不知道类T到底有哪些构造函数。...泛型中的静态构造函数 静态构造函数的规则:只能有一个,且不能有参数,他只能被.NET运行时自动调用,而不能人工调用。...泛型中的静态构造函数的原理和非泛型类是一样的,只需把泛型中的不同的封闭类理解为不同的类即可。以下两种情况可激发静态的构造函数: 1.       特定的封闭类第一次被实例化。 2.      ...泛型的使用范围 本文主要是在类中讲述泛型,实际上,泛型还可以用在类方法、接口、结构(struct)、委托等上面使用,使用方法大致相同,就不再讲述。 小结 C# 泛型是开发工具库中的一个无价之宝。

    1.3K60

    C#泛型详解

    有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的。读完本篇文章,你会对泛型有更深的了解。...因为类Node中不知道类T到底有哪些构造函数。...泛型中的静态构造函数 静态构造函数的规则:只能有一个,且不能有参数,他只能被.NET运行时自动调用,而不能人工调用。...泛型中的静态构造函数的原理和非泛型类是一样的,只需把泛型中的不同的封闭类理解为不同的类即可。以下两种情况可激发静态的构造函数: 1.       特定的封闭类第一次被实例化。 2.      ...泛型的使用范围 本文主要是在类中讲述泛型,实际上,泛型还可以用在类方法、接口、结构(struct)、委托等上面使用,使用方法大致相同,就不再讲述。 小结 C# 泛型是开发工具库中的一个无价之宝。

    1.1K21

    C#反射与特性(二):探究反射

    1.3 Type 类 System.Type 表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。...1.4 反射使用归类 C# 中,一个类型,可有以下元素组成: 类型名、构造函数/参数、方法/方法参数、字段、属性、基类型、继承接口等。...泛型相关 Type 中,与 泛型 有关的函数如下: System.Type 成员名称 说明 IsGenericType 如果类型是泛型,则返回 true。...GenericParameterPosition() 对于表示类型参数的 Type 对象,获取类型参数在声明其类型参数的泛型类型定义或泛型方法定义的类型参数列表中的位置。...IsGenericParameter 获取一个值,该值指示当前 Type 是否表示泛型类型或方法定义中的类型参数。

    1.7K40

    C# 学习笔记(9)—— 泛型

    C# 2.0 提出的泛型特性使类型可以被参数化,从而不必再为不同的而类型提供特殊版本的方法实现。...List 是 .Net 类库中实现的泛型类型,T 是泛型参数(形参)如果想实例化一个泛型类型,就必须传入实际的类型参数,如代码中的 int 和 string,就是实际的类型参数。...根据泛型类型参数是否提供实际类型,又可把泛型分为两类: 未绑定的泛型:没有为类型参数提供实际类型 已构造的泛型:已指定了实际类型作为参数 已构造的泛型又可分为: 开放类型:包含类型参数的泛型 密封类型...注意,约束的类型参数和类型本身没有关系,即在定义一个泛型结构体时,泛型类型一样可以被约束为引用类型。...,new T() 是可以编译通过的,因为 T 是一个值类型,所有值类型都有一个公共的无参构造函数,但如果不对 T 进行约束,或约束为引用类型,则上面的代码就会报错,因为有的引用类型是没有无参构造函数的

    24020

    看到他我一下子就悟了-- 泛型(2)

    .编译器不允许在一个约束中将System.ValueType指定成基类.相反,C#提供了特殊的语法,这种语法同时适用于引用类型.在这种语法中,不是为T指定一个基类.相反,只需要指定关键字struct或者...>,INullable where T:struct {//.......} 2.4 new()构造函数约束   New()构造函数约束允许开发人员实例化一个泛型类型的对象。...一般情况下,无法创建一个泛型类型参数的实例。然而,new()约束改变了这种情况,它要求类型实参必须 提供一个无参数的构造函数。在使用new()约束的时候,可以通过调用该无参构造函数来创建对象。...然而,如果某个类除了无参的构造函数外还需要定义其他的构造函数,那么必须 为该类显式地声明不含参数的构造函数。 使用new()时,应注意三点: 一、它可以和其他约束一起使用,但必须位于约束列表的末端。...定义泛型委托   public delegate T1 myDelegate(T2 op1,T2 op2) where T1:T2   结束语:泛型到这了,下一次介绍下反射,关于前几篇C

    77690

    C#高性能开发之类型系统:从C# 7.0 到C# 14的类型系统演进全景

    自C# 7.0以来,C#语言在类型系统方面引入了众多新数据类型、类型构造和语言特性,以提升性能、类型安全性和开发效率。...C# 11.0:必需成员, 泛型数学支持, 文件局部类型 特性表格 类型/构造 描述 主要用途 注意事项 必需成员 (required members) 强制成员初始化 确保关键字段初始化 需配合初始化器或构造函数... 与数组间的隐式转换 更自然地使用 span 类型 需注意 span 的生命周期 nameof 支持未绑定泛型 允许 nameof 使用未绑定泛型类型,如 nameof(List) 泛型编程中的类型名称获取...lambda 参数修饰符 概述 允许在 lambda 表达式中为参数添加修饰符,如 ref、out 等,无需指定类型。...partial 构造函数和事件 概述 扩展 partial 成员到实例构造函数和事件,允许在 partial 类型中分离定义和实现。

    12000

    泛型

    如今,泛型已经广泛应用于C#的各个领域,其中用得较多的有如下几项: 集合(在集合中泛型一如既往地重要); 委托(尤其是在LINQ中的应用); 异步代码(Task表示该方法将返回一个类型为T的值);...声明函数时用于描述函数输入数据的参数称为形参,函数调用时实际传递给函数的参数称为实参。图2-1描述了二者的关系。...比如前面提到C# 2中的泛型接口IEnumerable,它和.NET 1.0中的非泛型接口IEnumerable就属于不同类型。...直接调用构造器的实现代码比较烦琐:new Tuple(10, "x", 20) 但是使用静态方法配合类型推断,代码就简单多了4:4前面说过构造器不能为泛型,构造器中的泛型参数实际上是来自它所在类的类型形参...这种写法只有在typeof运算符中才有效,而且指向了泛型类型定义。对于度为1的泛型,书写格式为TypeName;如果参数多于1个,每增加一个参数就增加一个逗号。

    1.8K10

    C# 7.3新特性一览

    在静态上下文中,不能使用隐式的this实例接收者,它包含的方法体中没有定义this,如静态成员,它还包含不能使用this的地方,如字段初始化器和构造函数初始化器。...我们移除了在ctor初始化器中不能声明表达式变量(out变量声明和声明方式)的限制。这样声明的变量其作用域是整个构造函数的函数体。...在C# 7.3中,你可以在创建数组时对其初始化,就像你对普通数组所做的那样。该提案没有提供细节,但微软正考虑预初始化一个主数组,当函数被调用时可以快速复制。...在静态上下文中,不能使用隐式的this实例接收者,它包含的方法体中没有定义this,如静态成员,它还包含不能使用this的地方,如字段初始化器和构造函数初始化器。...我们移除了在ctor初始化器中不能声明表达式变量(out变量声明和声明方式)的限制。这样声明的变量其作用域是整个构造函数的函数体。

    1.4K30

    C# 发展历史及版本新功能介绍

    不过如果现在回顾 C# 1.0,你会觉得有点晕。 它没有我们习以为常的内置异步功能和以泛型为中心的巧妙功能。 其实它完全不具备泛型。 那 LINQ 呢? 尚不可用。 需要几年后才会面世。...协变和逆变 在 C# 中,协变和逆变能够实现数组类型、委托类型和泛型类型参数的隐式引用转换。 协变保留分配兼容性,逆变则与之相反。 以下代码演示分配兼容性、协变和逆变之间的差异。...通过可选参数,你可以为某些形参省略实参。 这两种技术都可与方法、索引器、构造函数和委托一起使用。 使用命名参数和可选参数时,将按实参出现在实参列表(而不是形参列表)中的顺序计算这些实参。...泛型类型参数支持协变和逆变,可在分配和使用泛型类型方面提供更大的灵活性。 在引用类型系统时,协变、逆变和不变性具有如下定义。...泛型协变和逆变提供了更强的功能来使用泛型,但风格比较偏学术,应该最受框架和库创建者的喜爱。 命名参数和可选参数帮助消除了很多方法重载,让使用更方便。 但是这些功能都没有完全改变模式。

    4.6K20

    C# 14 新增功能一览,你觉得实用吗?

    C# 14 添加了 extension 容器,可以声明扩展块,扩展块是包含类型或该类型的实例的扩展成员的非嵌套、非泛型静态类中的块。...跨度类型可以作为扩展方法的接收器、与其他转换组合,或者在泛型类型推理场景中提供帮助。 未绑定的泛型类型与nameof 从 C# 14 开始,nameof 的参数可以是未绑定的泛型类型。...在早期版本的 C# 中,只能使用关闭的泛型类型(例如 List)返回 List 名称。...支持更多部分成员(partial members) 从 C# 14 开始可以将实例构造函数和事件声明为部分成员(partial members)。...注意:部分构造函数和分部事件必须包含一个定义声明和一个实现声明。 Null 条件赋值 Null 条件成员访问运算符“?.”和“?[]”现在可在赋值或复合赋值的左侧使用。

    11510

    C#历代版本新特性——面试题常用

    掌握一门语言,当然要掌握它的特性,而随着C#历代版本的迭代更替,C#语言也日趋完善,在C#2.0~C#4.0版本所带来的新的语法特性格外重要。...,匿名方法 泛型 2.0版本的C#语言和公共语言运行时(CLR)中增加了泛型。...泛型将类型参数的概念引入.NET Framework,类型参数允许类和方法将一个或多个类型的指定延迟到和护短代码声明并实例化该类或方法的时候。...泛型方法,泛型委托,泛型接口 除了泛型类之外,还可以使用泛型方法,泛型委托,泛型接口 //泛型委托 public delegate void Del(T item); public static...locals:引用返回值和局部变量 Generalized async return types:async中使用泛型返回类型 More expression-bodied members:允许构造器、

    2K90

    # 泛型

    [TOC] # 泛型 ​ Dart2中的泛型同C#大部分都相同,可以按C#的用法来使用(只有小部分语法不同)。...1.创建泛型集合的几种方法 //工厂方法创建泛型集合实例,List为Dart核心库中的类 var list=List.from(['a','b']); //使用可忽略的new关键字...,在子类中还要重复实现,所以dart引入了mixin来解决这个问题。...extends TestA{ //因为TestA中没有默认构造函数,所以必须至少实现父类的一个构造函数 Test1.noArg():super.noArg(); } 构造函数无法被子类继承...new Tesst1(); //TestA //Test1 # 工厂构造函数 工厂构造函数属于构造函数的一种特殊用法,构造函数不需要返回值,但是工厂构造函数必须返回该类的实例,使用方式同构造函数没有区别

    81310

    1-泛型

    C#泛型由CLR在运行时支持,这使得泛型可以在CLR支持的各种语言上无缝集合; C#泛型代码在被编译[第一次编译]为IL代码和元数据时[泛型版的IL和元数据], 采用特殊的占位符来表示泛型类型,并用专有的...C#泛型类型携带有丰富的元数据,因此C#的泛型类型可以应用于强大的反射技术;采用[基类, 接口, 构造器, 值类型/引用类型]的约束方式来实现对类型参数的"显式约束", 提高了类型的安全性。...泛型类型和泛型方法 可以用于泛型的类型有类、接口,结构、委托。 C#支持泛型方法,但不支持除方法外的其他成员[属性、事件、索引器、构造器、析构器。...但这些成员本身可以包含在泛型类型中,并使用泛型类型的类型参数]; 泛型方法可以包含在泛型类型中,也可以包含在非泛型类型中[即普通的类型]。...泛型约束支持四种形式的约束【接口约束,基类约束,构造器约束,值类型/引用类型约束】; 约束并不是必须的,如果没有指定约束,那么类型参数将只能访问System.Object类型中的公有方法。

    980100

    C#编程-001:C#简介

    而布尔型同整型,及枚举型同整型不允许隐式转换,非空指针(通过引用相似对象)同用户定义类型的隐式转换必段被显式的确定,不同于C++的复制构造函数 数组声明语法不同("int[] a = new int[5...]" 而不是 "int a[5]") 枚举位于其所在的名字空间中 C#中没有模版,但是在C# 2.0中引入了泛型,并且支持一些C++模版不支持的特性。...比如泛型参数中的类型约束。...另一方面,表达式不能像C++模版中被用于类型参数 属性支持,使用类似访问成员的方式调用 完整的反射支持 C# 2.0 新特性 在C# 2.0中的新特性有: 局部类型(将类实现分在多个文件中) 泛型或参数化类型...但是实际上,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。 在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。

    30610

    表达式树练习实践:C#值类型、引用类型、泛型、集合、调用函数

    表达式树练习实践:C#值类型、引用类型、泛型、集合、调用函数 目录 表达式树练习实践:C#值类型、引用类型、泛型、集合、调用函数 一,定义变量 二,访问变量/类型的属性字段和方法 1....调用函数 调用静态类型的函数 调用实例的函数 三,实例化引用类型 new 给属性赋值 创建引用类型 示例 四,实例化泛型类型于调用 五,定义集合变量、初始化、添加元素 ?...一,定义变量 C# 表达式树中,定义一个变量,使用 ParameterExpression。...他们创建一个 ParameterExpression节点,该节点可用于标识表达式树中的参数或变量。 对于使用定义: Expression.Variable 用于在块内声明局部变量。...NewExpression New(Type type); 依然使用上面的 Test 类型 NewExpression newA = Expression.New(typeof(Test)); 默认没有参数的构造函数

    1.2K20
    领券