0

私はC#を学んでいるので、ご容赦ください。C# をいじって、テストするインベントリ システムを作成することにしましたが、スクリプトに 1 つの問題があります。

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 つの引数が含まれています。私がここに欠けているものはありますか?

補足として。私のスクリプトについてコメントや提案があれば、それも役に立ちます。

4

5 に答える 5

6

コンストラクターはprivate、クラス自体の外側のコードからは「見えない」ためです。internalコンストラクターの前にキーワードを追加してみてください。または、他のプロジェクトからも表示する必要がある場合は、public代わりに追加します。

別の問題: クラスでは、コンストラクター内で 3 つのローカル変数statuseffectを宣言します。これらの変数の唯一のスコープはコンストラクターです。それらの宣言をコンストラクタの外に移動する必要があります (その後、それらはクラスのインスタンスフィールドになります)。コンストラクターは引き続きそれらに割り当てることができます。

于 2012-08-17T07:45:34.173 に答える
2

コンストラクターをマークする必要がありますpublic

于 2012-08-17T07:45:29.093 に答える
2

具体c#的にはオブジェクト指向言語であるため、アクセス指定子なしでクラスで宣言するすべてのものは、コンパイラによってプライベートと見なされます。したがって、コンストラクターを宣言するpublicと、ケースが解決します

public statuseffect(string Effect,int Amount,int Duration)
    {
        string effect = Effect;
        int amount = Amount;
        int duration = Duration;
    }
于 2012-08-17T07:48:15.180 に答える
0

コンストラクターを公開します。デフォルトでアクセス指定子を指定しないと、それはプライベートになります。つまり、クラス内でのみ使用できます。公開すると、外部からアクセスできるようになります。

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

さらに、それらの変数で何かをしても、それらは役に立ちません。

于 2012-08-17T07:48:46.083 に答える
-1
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);
    }
}
于 2015-02-20T00:52:49.643 に答える