静态类没有构造函数

时间:2012-08-28 12:39:10

标签: c# serialization

我有一个这样的课程:

public static class Extras
{
    static Extras()
    {

    }

    public static string SerializeObject<T>(this T toSerialize)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
        StringWriter textWriter = new StringWriter();

        xmlSerializer.Serialize(textWriter, toSerialize);
        return textWriter.ToString();
    }
}

它用于序列化一个对象,它位于自己的类库中。

当我在主MVC项目中引用该类时,我从编译器获得以下消息:

Type'ReablementExtras.Extras' has no constructors.

请有人能告诉我一点小小的想法吗?

感谢。

1 个答案:

答案 0 :(得分:2)

无法实例化静态类。您只能通过类名称调用方法或属性:

var s = Extras.SerializeObject<int>(3); // OK

Extras e = new Extras(); // not OK
e.SerializeObject<int>(3); // not OK

这种写作称为Extension Method。您也可以将该方法称为任何类型的类成员:

MyClass c = new MyClass();
var s = c.SerializeObject();

如果您没有在intellisense列表中看到SerializeObject,则需要添加using语句,这是您的情况:

using ReablementExtras;

您看到“无构造函数”错误的原因是因为此构造函数是静态的。静态构造函数不能直接调用,但框架在您访问此类的第一个方法或属性之前调用它们。

静态构造函数也不能有访问修饰符(公共,私有等...),也不能有任何参数。