![](/img/trans.png)
[英]Unity C# Error: 'Sprite' does not contain a constructor that takes 0 arguments
[英]C# Error: Parent does not contain a constructor that takes 0 arguments
我的代碼是
public class Parent
{
public Parent(int i)
{
Console.WriteLine("parent");
}
}
public class Child : Parent
{
public Child(int i)
{
Console.WriteLine("child");
}
}
我收到錯誤:
Parent 不包含采用 0 個參數的構造函數。
我理解問題是Parent
沒有帶有 0 個參數的構造函數。 但我的問題是,為什么我們需要一個零參數的構造函數? 為什么沒有它代碼就不能工作?
由於您沒有顯式調用父構造函數作為子類構造函數的一部分,因此插入了對無參數父構造函數的隱式調用。 該構造函數不存在,因此您會收到該錯誤。
要糾正這種情況,您需要添加一個顯式調用:
public Child(int i) : base(i)
{
Console.WriteLine("child");
}
或者,您可以只添加一個無參數的父構造函數:
protected Parent() { }
您需要將您孩子的構造函數更改為:
public child(int i) : base(i)
{
// etc...
}
您收到錯誤是因為您的父類的構造函數接受一個參數,但您沒有將該參數從子類傳遞給父類。
C# 中沒有繼承構造函數,您必須手動鏈接它們。
您需要將child
類的構造函數更改為:
public child(int i) : base(i)
{
Console.WriteLine("child");
}
部分: base(i)
表示應該使用帶有一個int
參數的基類的構造函數。 如果缺少此項,則隱含地告訴編譯器使用不帶參數的默認構造函數。 因為基類中不存在這樣的構造函數,所以它會給你這個錯誤。
編譯器無法猜測應該為基本構造函數參數傳遞什么。 你必須明確地做到這一點:
public class child : parent {
public child(int i) : base(i) {
Console.WriteLine("child");
}
}
您可以在父類中使用不帶參數的構造函數:
public parent() { }
默認情況下,編譯器嘗試調用基類的無參數構造函數。
如果基類沒有無參數構造函數,您必須自己顯式調用它:
public child(int i) : base(i){
Console.WriteLine("child");}
參考: 構造函數在繼承期間調用層次結構
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.