Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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
C# 如何在C中声明其类型为用户定义的实例#_C#_.net - Fatal编程技术网

C# 如何在C中声明其类型为用户定义的实例#

C# 如何在C中声明其类型为用户定义的实例#,c#,.net,C#,.net,简单地说,我的问题是关于在运行时定义实例的类型,这种类型是用户定义的。 看起来像这样的东西: Type instance1; 在运行时,用户将选择例如“int”,然后 int instance1; 有什么建议吗??向下转换在这里有效吗?您正在寻找的是泛型。读一篇介绍 例如,如果要声明该类,则希望该用户定义的类型为,如下所示: class MyClass<T> { private T instance1 = default(T); public MyClass(T

简单地说,我的问题是关于在运行时定义实例的类型,这种类型是用户定义的。 看起来像这样的东西:

Type instance1;
在运行时,用户将选择例如“int”,然后

int instance1;

有什么建议吗??向下转换在这里有效吗?

您正在寻找的是泛型。读一篇介绍

例如,如果要声明该类,则希望该用户定义的类型为,如下所示:

class MyClass<T>
{
    private T instance1 = default(T);

    public MyClass(T initalvalue)
    {
        instance1 = initalvalue;
    }

    //... some more code
}
class-MyClass
{
私有T实例1=默认值(T);
公共MyClass(T初始值)
{
instance1=初始值;
}
//…更多的代码
}

如果不解释您希望实现的目标的更多细节,您可以使用方法*,也可以使用创建给定类型的实例


*如果在编译时可以知道该类型,或者如果它只是有限的一组类型中的一个,并且您将选择在编译时命名的类型,那么泛型方法将很好地工作(即用户将说
int
char
double
,并且您将相应地使用正确的泛型)。如果它是完全不确定的,您仍然需要使用反射来实例化运行时给定类型的泛型。

C#4.0中的dynamic关键字我想,这就是您要寻找的:

Type myType = typeof(int);
int value = Activatior.CreateInstance(myType);

在.NET4中,dynamic关键字可能更有效、更方便。

恐怕泛型不是OP想要的。Shaza说的是使用正在运行的应用程序的最终用户,而不是使用代码的程序员。应在以下时间选择类型:runtime@Maciej:这只是猜测,只要沙扎没有说他真正想做什么。我在基本帖子上评论了我正在做什么,顺便说一句,我是“她”:)@沙扎:对不起。我以前没听说过你的名字。哇,不知怎么的,它闻起来很不对劲。您正在编写一个应用程序,它的用户必须知道它的代码并告诉它使用什么类型?如果我可以问的话,你想做什么?多了解一点关于你愿意做什么的信息是非常有用的。用户定义的类型来自哪里?最终用户是从GUI中的下拉框中选择的吗?@Maciej:没错。这就是我提出泛型的原因。因为c#是一种静态类型语言,所以您也应该以这种方式编写代码。
dynamic
关键字可能不是用严格类型语言解决问题的正确方法(人们在c#4和
dynamic
:)之前编写了很棒的程序)。也许Shaza必须使用reflector,如果类型真的是用户定义的,但他没有说任何具体的内容。很抱歉我不够清楚,我正在开发一个应用程序,开发人员可以使用它来构建递归方法,我需要上一个问题的答案,因为我正在通过开发人员给我的一些输入构建方法,所以其中一个输入应该是方法的输出,可以通过下拉框选择。对不起,我仍然无法理解您是如何想象的。这种方法是如何建立的?也许您最好使用某种动态脚本语言(python/ruby/vbscript/javascript)的解释器,让用户用自己的代码编写递归方法?只是一个建议…+1。是的,我考虑过用泛型来解决这个问题,就像你说的,如果在编译时有一组已知的定义类型。如果您不使用动态语言进行互操作,我就不喜欢使用
dynamic
。我认为把c#变成它所不是的东西是相当丑陋的:一种动态语言。