簡體   English   中英

不包含帶有3個參數的構造函數

[英]does not contain a constructor that takes 3 arguments

請耐心等待,因為我正在學習C#。 只是弄亂了C#,我決定想出一個清單系統進行測試,但是我的腳本中有一個問題:

using System;
using System.Collections.Generic;


public class Item
{
    public String name;
    public int pesos;

    public int getPesos()
    {
        return pesos;
    }
    public String getName()
    {
        return name;
    }
}
public class statuseffect
{
    statuseffect(string Effect,int Amount,int Duration)
    {
        string effect = Effect;
        int amount = Amount;
        int duration = Duration;
    }
}
public class Potion : Item 
{
    public int hpeffect;
    public int mpeffect;
    List<statuseffect> effects = new List<statuseffect>();


    public Potion(int hp,int mp)
    {
        hpeffect = hp;
        mpeffect = mp;
    }
    public void addEffect(statuseffect eff)
    {
        effects.Add(eff);
    }
}
class game
{
public static void Main()
    {   
        Potion healthPotion = new Potion(200,50);
        healthPotion.pesos = 23;
        Console.WriteLine(healthPotion.hpeffect);
        statuseffect slow = new statuseffect("slow",10,30);
    }
}

在最后一行中,編譯器告訴我statuseffect不包含帶有3個參數的構造函數。 據我所知,它確實包含3個參數。 我在這里缺少什么嗎?

作為旁注。 如果你們對我的腳本有任何意見或建議,那也將有所幫助。

您的構造函數是private ,因此對類本身之外的代碼“不可見”。 嘗試在構造函數之前添加關鍵字internal 或者,如果還需要從其他項目中看到它,則改為添加public

另一個問題:在類statuseffect ,您在構造函數中聲明了三個局部變量。 這些變量的唯一作用域是構造函數。 您必須將它們的聲明移出構造函數(然后它們將成為類的實例字段 )。 構造函數仍可以分配給它們。

您的構造函數需要標記為public

由於c#是專門面向對象的語言,因此您在沒有訪問說明符的類中聲明的所有內容都被編譯器視為私有的。 因此,將您的構造函數聲明為public ,可以解決這種情況

public statuseffect(string Effect,int Amount,int Duration)
    {
        string effect = Effect;
        int amount = Amount;
        int duration = Duration;
    }

公開您的構造函數。 默認情況下,如果您不指定任何訪問說明符,它將變為私有的,這意味着它只能在您的類內部使用。 公開發布可以從外部訪問。

public class statuseffect
{
  public statuseffect(string Effect,int Amount,int Duration)
  {
    string effect = Effect;
    int amount = Amount;
    int duration = Duration;
  }
}

此外,對那些變量做一些事情,它們是沒有用的。

public static void Populare_Books()
{
    Books[] bks = { new Books(1, "Shogun", "James Clavell"), new Books(2, "Pe aripile vantului", "Margaret Mitchell"), new Books(3, "MANDRIE SI PREJUDECATA", "Jane Austen"), new Books(4, "ANNA KARENINA", " Lev Tolstoi"), new Books(5, "Notre-Dame de Paris", "Victor Hugo"), new Books(6, "Marile speranțe", "Charles Dickens"), new Books(7, "Ion", "Liviu Rebreanu"), new Books(8, "Cărțile junglei", "Rudyard Kipling")};
    MySqlConnection con = new MySqlConnection("DataSource=localhost; UserID=root;database=" + nume);
    con.Open();
    MySqlCommand cmd = con.CreateCommand();
    cmd.CommandText = "INSERT INTO Books (BookID, Title, ISBN, Number, NumberLeft) VALUES (@BookID, (@Title, (@ISBN, (@Number, (@NumberLeft)";
    MySqlTransaction tra = con.BeginTransaction();
    try
    {
        cmd.Transaction = tra;
        foreach (Books bo in bks)
        {
            cmd.Parameters.AddWithValue("@BookID", bo.BookID);
            cmd.Parameters.AddWithValue("@Title", bo.Title);
            cmd.Parameters.AddWithValue("@ISBN", bo.ISBN);
            cmd.Parameters.AddWithValue("@Number", bo.Number);
            cmd.Parameters.AddWithValue("@NumberLeft", bo.NumberLeft);
            cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
        }
        tra.Commit();
        Console.WriteLine("Tabelul Books a fost umplut");
        con.Close();
    }
    catch (Exception ex)
    {
        tra.Rollback();
        Console.WriteLine(ex.Message);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM