首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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#时没办法实现的。 如果有朋友,发现了解决问题的方法,请分享下!愿共同学习!

3.7K60
  • C# 基础知识系列- 5 反射和

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

    1.5K60

    一文搞定知识

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

    99110

    C#详解

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

    1.2K60

    C#详解

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

    96221

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

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

    1.5K40

    看到他我一下子就悟了-- (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

    71390

    C# 学习笔记(9)——

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

    16820

    如今,已经广泛应用于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.4K10

    C# 7.3新特性一览

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

    1.2K30

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

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

    4.2K20

    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:允许构造器、

    1.9K90

    #

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

    75810

    1-

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

    915100

    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将中间代码翻译成为二进制机器码,从而使它得到正确的运行。

    18710

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

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

    98920

    C# new

    C#,new关键字有三种主要用法: new 运算符 (New Operator): 用于创建对象和调用构造函数。这是new关键字最常见的用法,用于实例化类和调用构造函数。...new 约束 (New Constraint): 用于声明,指定类型参数必须具有公共的无参数构造函数。这种用法确保了类型参数被实例化时,会调用该类型的默认构造函数。...当使用new关键字创建对象时,相应类的构造函数会被调用,以便对对象进行初始化。如果类没有定义构造函数,系统会提供一个默认的构造函数。...现在可以马后炮的讲:正因为是编译器只有在编译期才确定具体类型,所以编译器无法事先知道要直接调用哪些无参构造函数类,所以才用到了反射。...试想一下 ,如果你的框架中有些方法用到了无参构造函数约束,并且处于调用的热路径上,其实这样性能是大打折扣的,因为反射 Activator.CreateInstance 性能肯定是远远不如直接调用无参构造函数

    15120

    C#反射与特性(九):全网最全-解析反射

    方法 方法参数 学以致用 2.1.5 构造函数 2.1.6 属性 获取访问修饰符 获取重写关键字 解析属性构造器 2.1.7 事件 2.1.8 索引器 2.1.9 获取特性 2.2 委托 2.3...我们根据反射的类型对象,大概分为:类、值类型、数组、结构体、枚举、接口、抽象类、委托、事件、各种(类、方法、构造函数等)。...类型的方法 ParameterInfo 构造函数或方法的参数 EventInfo 类型的事件 特性的话,C#反射与特性(七):自定义特性以及应用》已经讲解了,这里不再赘述。...2.1.1 访问修饰符 public、private两个修饰符,判断起来十分简单; C# 关键字 protected 和 internal IL 没有任何意义,且不会用于反射 API 。...2.1.5 构造函数 构造函数的话,没有返回类型,也没有重写,获取参数方法的部分, 因为有很多跟 2.1.4 重复的代码,因此这里不再赘述,代码已经上传到码云,可以参考 解析构造函数

    1.9K40
    领券