2014-11-02 171 views
2

问题的新实例:如何创建泛型类型类

  1. 如何创建,设置,返回和实例类型“T”的对象?
  2. 我该如何访问静态函数中的子类类型(Tag:DataBASE)?

我想创建一个通用的“GetAsClass”函数,它将返回一个子类的初始化实例。我无法弄清楚如何创建我想返回的类的新实例并返回子类的类型。

说我有两类:

  1. 标签
  2. 用户

我想创建的基类,它会得到它是什么类型的单个功能。在另一方面,我想,使其静态以及(但我没有访问“这个”,我不知道如何让子类类型。

private async Task<T> GetAsClass<T>(string objectId) { 

     Type classType = this.GetType(); 
     string className = classType.Name; 

     // This needs to be of type "T" (Tag myTag = new Tag();) How would I accomplish something like this? 
     object toReturnObject = new object(); 
     ParseObject myParseObject = ParseObject.GetAsParseObject(objectId); 

     foreach (PropertyInfo field in classType.GetRuntimeProperties()) { 
      if (field.CanRead) { 
       string propertyName = StringHelper.ToLowerCamelCase(field.Name); 
       if (field.PropertyType == typeof(string)) { 
        string propertyValue = myParseObject.Get<string>(propertyName); 
        field.SetValue(toReturnObject , propertyValue); 
       } 
       if (field.PropertyType == typeof(int)) { 
        int propertyValue = myParseObject.Get<int>(propertyName); 
        field.SetValue(toReturnObject, propertyValue); 
       } 
      } 
     } 

     return toReturnObject; 
    } 

Code so far 更高分辨率:http://snag.gy/FbCfu.jpg

+0

我的代码逻辑是否有意义?我试图做甚至可能吗? – 2014-11-02 04:07:35

+0

您应该将您的代码作为文本发布,而不是图像......标记(称为'markdown')能够将您的问题的一部分作为代码,并执行语法突出显示等。 – Steve 2014-11-02 04:10:48

+0

似乎难以阅读我认为这是一个截图,但可以肯定的是,如果这能让人们帮助我。现在如何帮助我的问题,而不是对语义的建设性批评。 – 2014-11-02 04:34:27

回答

3

您可以generic type constraints找到这个网页是有益的 基本上,你会改变你的类的签名/方法是:

private async Task<T> GetAsClass<T>(string objectId) 
    where T: new() 
{ 
    ... 
} 

它将接受类型T的就只我的它提供了一个没有参数的默认构造函数。一旦这个条件得到保证,那么你的班级可以调用new T()

+0

太棒了!这听起来和我一直在寻找的一样。一旦我完成了一些其他的代码,我会给它一个镜头。 – 2014-11-02 06:10:23