类设计问题 - 传递类类型?

时间:2009-07-07 20:13:30

标签: c# xml oop

我在类的方法中有以下代码:

XmlSerializer serializer = new XmlSerializer(typeof(FooClass));

如何传入构造函数或类的参数--foo类?

我认为它与反射有关,因为你不能仅仅作为参数传递一个类名 - 所以下面的代码有点意义(感谢Aidan) -

XmlSerializer serializer = new XmlSerializer(Type.GetType("namespace.FooClass"));

7 个答案:

答案 0 :(得分:1)

void serializeme(Object o) {
   Type t = o.GetType();
   XmlSerializer serializer = new XmlSerializer(t);
   ...
}

答案 1 :(得分:1)

如果我理解你的问题,你想要这个:

class YourClass {
   Type type;

   public YourClass(Type type) {
       this.type = type;
   }

   public XmlSerializer Method() {
       return new XmlSerializer(type);
   }
}

...

new YourClass(typeof(Foo));

答案 2 :(得分:0)

这样做你想要的吗?

XmlSerializer serializer = new XmlSerializer(foo.GetType());

答案 3 :(得分:0)

在方法中添加一个类型参数:

 public XmlSerializer Method<T>()
 {
    return new XmlSerializer(typeof(T));
 }

然后您将该方法称为Method<Foo>();

答案 4 :(得分:0)

考虑这段代码:

Type t = foo.GetType();
XmlSerializer fooSerializer = MakeSerializer(t);

...

private XmlSerializer MakeSerializer(Type myType)
{
  XmlSerializer serializer = new XmlSerializer(myType);
  return serializer;
}

答案 5 :(得分:0)

你会用反射来达到你想做的(我相信)。

您将使用XmlSerializer构造函数的XmlSerializer(Type)覆盖。

XmlSerializer serializer = new XmlSerializer(Type.GetType("namespace.Foo"));

XmlSerializer serializer = new XmlSerializer(fooInstance.GetType());

取决于您手头是否有该类型的实例。

答案 6 :(得分:0)

据我所知,你必须在XmlSerializer中使用无参数构造函数。所以XmlSerializer将使用的唯一foo构造函数是:

public foo()
{
}