struct default构造函数的属性

时间:2018-05-24 10:49:24

标签: c# struct attributes default-constructor

由于结构不能有明确的用户定义的无参数构造函数,例如

public struct MyStruct
{
    public MyStruct() { … } // Not allowed!
}

我想知道是否以及如何将属性应用于该确切的构造函数。 最后,我想要做的就是这样(如果无参数构造函数可以是私有的,那么最好的是,但也不允许这样做):

public struct MyStruct
{
    [Obsolete("Do not call the constructor directly, use MyStruct.Get() instead.")]
    public MyStruct() { … }

    public static MyStruct Get
    {
      // Important initializing here.
    }
}

是否存在类似虚构属性target [constructor: Obsolete()]的内容,它允许将属性应用于默认构造函数?

编辑:更多信息。

情况是这样的:我需要使用MyStruct进行P / Invoke并且不能使用类。我想警告用户他们不应该获得MyStruct的实例,因为它错过了重要的初始化,而是应该使用工厂方法。

1 个答案:

答案 0 :(得分:1)

由于struct是ValueType,其本质你找不到任何方式

即使你实例化了一个结构,它也会被实例化。

int x = new int();相当于int x;

MyStruct s = new MyStruct();相当于MyStruct s;

假设您可以找到警告MyStruct s = new MyStruct();的方法。 MyStruct s;的任何定义也会被警告!然后就没办法了。