Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以创建变量值类型? Kevlin Henney的论文给出了一个所谓的变量值类型功能的动机,以及C++实现的概要。这是一本很好的读物,它完全涵盖了我希望在C#中提供的内容:一种可以保存不同类型值的通用类型_C#_Variant - Fatal编程技术网

是否可以创建变量值类型? Kevlin Henney的论文给出了一个所谓的变量值类型功能的动机,以及C++实现的概要。这是一本很好的读物,它完全涵盖了我希望在C#中提供的内容:一种可以保存不同类型值的通用类型

是否可以创建变量值类型? Kevlin Henney的论文给出了一个所谓的变量值类型功能的动机,以及C++实现的概要。这是一本很好的读物,它完全涵盖了我希望在C#中提供的内容:一种可以保存不同类型值的通用类型,c#,variant,C#,Variant,不过,我在C#中找不到类似的东西。有些类似的问题,所以有不满意的答案和评论,如“这可能不是你想要的”。这让我感到惊讶,因为它看起来像是相当普遍需要的功能。亨尼的C++类被广泛使用。 无法在C#中创建此功能吗 编辑:对于其中一个答案,我不认为泛型会起作用。使用泛型要求开发人员知道Variant变量所包含的值类型,并且该类型对于特定的Variant变量也是不可变的。但是我所说的变体类型应该能够容纳不同的类型。例如,函数Variant ReadValue()可以从文件中读取条目,对其进行解析,相应地

不过,我在C#中找不到类似的东西。有些类似的问题,所以有不满意的答案和评论,如“这可能不是你想要的”。这让我感到惊讶,因为它看起来像是相当普遍需要的功能。亨尼的C++类被广泛使用。 无法在C#中创建此功能吗



编辑:对于其中一个答案,我不认为泛型会起作用。使用泛型要求开发人员知道
Variant
变量所包含的值类型,并且该类型对于特定的
Variant
变量也是不可变的。但是我所说的
变体
类型应该能够容纳不同的类型。例如,函数
Variant ReadValue()
可以从文件中读取条目,对其进行解析,相应地填充
Variant
值,然后返回它。调用方事先不知道返回的
变量中将包含什么类型的类型

这就是泛型的用途<代码>列表其中
T
是任何东西。泛型同时提供编译时和运行时类型安全性

您可以创建自己的泛型类型来存储所需的任何值。您还可以将任何内容强制转换为
对象
,并将其作为对象传递

您还可以使用泛型约束来限制您的类型,例如只希望
T
成为引用类型:

public MyClass<T> where T : class
public MyClass,其中T:class
或值类型:

public MyClass<T> where T : struct
公共MyClass,其中T:struct

请参阅此处的更多信息:

这就是泛型的用途<代码>列表其中
T
是任何东西。泛型同时提供编译时和运行时类型安全性

您可以创建自己的泛型类型来存储所需的任何值。您还可以将任何内容强制转换为
对象
,并将其作为对象传递

您还可以使用泛型约束来限制您的类型,例如只希望
T
成为引用类型:

public MyClass<T> where T : class
public MyClass,其中T:class
或值类型:

public MyClass<T> where T : struct
公共MyClass,其中T:struct
请参阅此处的更多信息:

您也可以研究如何使用它

动态类型使发生动态类型的操作能够绕过编译时类型检查。相反,这些操作是在运行时解决的

在大多数情况下,类型动态的行为与类型对象类似。但是,编译器不会解析或检查包含dynamic类型表达式的操作

你也可以考虑使用它

动态类型使发生动态类型的操作能够绕过编译时类型检查。相反,这些操作是在运行时解决的

在大多数情况下,类型动态的行为与类型对象类似。但是,编译器不会解析或检查包含dynamic类型表达式的操作


亨利的文章很老(2000年)。在一个现场课程(伦敦DevWeek 2008)中,我记得他解释了OCP(开闭原则)的低耦合和抽象(接口)实现。他非常喜欢泛型,更喜欢泛型接口。所以从概念上讲,这很可能就是他当时写的东西,尽管我必须承认我没有读过这篇文章。C的泛型甚至比C++模板还要健壮一些,你应该看看.< 另一方面:


你不能用泛型做的,C和C++已经可以使用。

< P>亨尼的文章相当古老(2000年)。在一个现场课程(伦敦DevWeek 2008)中,我记得他解释了OCP(开闭原则)的低耦合和抽象(接口)实现。他非常喜欢泛型,更喜欢泛型接口。所以从概念上讲,这很可能就是他当时写的东西,尽管我必须承认我没有读过这篇文章。C的泛型甚至比C++模板还要健壮一些,你应该看看.< 另一方面:


泛型不能用C语言和C++语言做的。

< P>,从我理解的,使用<代码> C++中的任何< /C> >与使用C <代码>对象< /> >和C方法中的组合相同,除了有良好的语法,以便从任何类型自动转换为任何类型。对于值类型,不受限制。

< P>从我理解的,使用<代码> C++中的任何与使用C <代码>对象< /C> >和C方法中的组合相同,除了从自类型转换到任何类型都有良好的语法。仅对值类型没有限制。

将其声明为type
Object
?@bhamlin使用
Object
是否合适?我不知道,因为我对C#还相当陌生。不过,这种方法听起来太普通了,因为
对象基本上可以是任何东西,包括非值类型。将其声明为type
对象如何?@bhamlin使用
对象是否合适?我不知道,因为我对C#还相当陌生。不过,这种方法听起来太通用了,因为
对象基本上可以是任何东西,包括非值类型。您不能将泛型类型限制为
ValueType
。@Servy:更好的措辞是“您的意思是
struct
而不是
ValueType
”。谢谢@Servy和@Magus纠正了我的错误,并忘记了这一点。我一直认为您可以这样做,因为您可以通过
new()
来限制引用类型!在那种情况下,它只是
struct
@Magus我希望他能找到答案