Unity C# Error: 'Sprite' does not contain a constructor that takes 0 arguments

Unity C# Error: 'Sprite' does not contain a constructor that takes 0 arguments

我一直在为我的 Unity 游戏开发项目系统。我对编码还是很陌生,但我正在尽我最大的努力。

我的项目系统通过使用我需要的数据访问接口来工作。在尝试将我的 sprite 从接口分配给私有变量时,我收到错误消息“'Sprite' 不包含采用 0 个参数的构造函数。”我到处寻找解决方案,但到目前为止还没有找到对我有用的修复程序。

我创建的Class访问界面是这样的:

public class ISType : IISType {

    [SerializeField] string _name;

    [SerializeField] Sprite _icon;

    ISType()
    {
        _name = "Type";
        _icon = new Sprite(); }

    public string Name
    {
        get
        { return _name; }

        set
        { _name = value }
    }

    public Sprite Icon {
        get
        { return _icon; }

        set
        { _icon = value; }
}

}

如果有人能告诉我发生了什么事,我将不胜感激! :)

答案在错误中。 Sprite 没有采用 0 个参数的构造函数。没有看到代码,我猜你制作了一个带参数的自定义构造函数,但没有添加无参数构造函数。

默认的无参数构造函数如下所示:

Sprite()
{}

一定要多做阅读和教程。这是相当基本的 class 信息。

看起来 Sprite 不包含 public 接受零参数的构造函数。

未定义构造函数的 class 将具有无参数构造函数。

public class MyClass { }

MyClass x= new MyClass(); // this is valid

但是,如果它定义了任何其他构造函数,则此无参数 'default' 构造函数不再是 'a given'。

Difference between default constructor and paramterless constructor?

Answer by Nicole Calinoiu

The "default" constructor is added by the C# compiler if your class does not contain an explicit instance constructor. It is a public, parameterless constructor.

public class MyClass { 
    public MyClass(string foo)
    { 
    }
}

MyClass x= new MyClass(); // this is invalid 

class 必须手动定义无参数构造函数。

public class MyClass { 
   // parameterless constructor
    public MyClass()
    { 
    }

    public MyClass(string foo)
    { 
    }
}

MyClass x= new MyClass(); // this is valid again!

有时 public 不提供构造函数,class 而是提供静态方法来实例化对象。

public class MyClass
{
    private MyClass()
    {
    }

    public static MyClass Create()
    {
        return new MyClass();
    }
}

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/private-constructors

A private constructor is a special instance constructor. It is generally used in classes that contain static members only. If a class has one or more private constructors and no public constructors, other classes (except nested classes) cannot create instances of this class.

在不了解 Sprite class 的情况下,我的猜测是有一个用于创建 Sprite

实例的静态方法

类似于

Sprite sprite = Sprite.Create(...);