0

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

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

我创建的用于访问接口的类如下所示:

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; }
}

}

如果有人能说出发生了什么,我将非常感谢您的帮助!:)

4

2 回答 2

0

答案在错误中。Sprite 没有采用 0 个参数的构造函数。在没有看到代码的情况下,我猜您使用参数制作了一个自定义构造函数,并且没有添加无参数的构造函数。

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

Sprite()
{}

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

于 2019-01-28T23:24:43.487 回答
0

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

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

public class MyClass { }

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

但是,如果它定义了任何其他构造函数,则这个无参数的“默认”构造函数不再是“给定的”。

默认构造函数和无参数构造函数之间的区别?

Nicole Calinoiu 的回答

如果您的类不包含显式实例构造函数,则 C# 编译器会添加“默认”构造函数。它是一个公共的、无参数的构造函数。 https://stackoverflow.com/a/10498709/5569485

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

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

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

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

    public MyClass(string foo)
    { 
    }
}

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

有时没有公开提供构造函数,而是一个类提供静态方法来实例化对象。

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

私有构造函数是一种特殊的实例构造函数。它通常用于仅包含静态成员的类中。如果一个类有一个或多个私有构造函数而没有公共构造函数,则其他类(嵌套类除外)不能创建该类的实例。

在不了解Sprite该类的情况下,我的猜测是有一个用于创建 Sprite 实例的静态方法

就像是

Sprite sprite = Sprite.Create(...);
于 2019-01-28T23:30:28.060 回答