-1

この例では、変数整数を初期化し、整数値をパラメーター化されたコンストラクターに渡しました。その後、文字列値を出力するインスタンス メソッドを宣言し、最後にメイン プログラムでそのメソッドを呼び出します。値を印刷すると、NULL値が表示されます。なぜですか?

class CPrint
{
    int i = 100;
    string sToPrint;

    // here Initialize a default Constructor.
    public CPrint() { }
    //public CPrinter() : this("Default Constructor Value") {}

    // here defining a custom constructor which take one parameter of string value
    public CPrint(string s)
    {
        sToPrint = s;
    }

    // here defining a custom constructor which take one parameter of integer value

    public CPrint(int i)
    {
        sToPrint = Convert.ToString(i);
    }

    // instance method
    public void PrintString()
    {
        Console.WriteLine("I have just printed ...{0}", sToPrint);

    }
}

class Program
{
    static void Main(string[] args)
    {
        CPrint p = new CPrint();
        p.PrintString(); 
        Console.ReadLine();
    }
}
4

3 に答える 3

2

Main メソッドでコンストラクターを使用しCPrint()ましたが、何もしません。したがって、sToPrintは初期化されていないため、 ですnull。null 以外の値が必要な場合は、CPrint(String)orCPrint(int)コンストラクターを呼び出す必要があります。

例えば、

class Program 
{
    static void Main(string[] args) 
    { 
        CPrint p = new CPrint("Hello"); 
        p.PrintString(); Console.ReadLine(); 
    } 
}

「こんにちは」と表示されます

于 2012-05-26T14:44:44.687 に答える
2

コードによると、デフォルトのコンストラクターを呼び出すと、null 値のみが取得されます。以下のようにできます。

public CPrint() {
        sToPrint = Convert.ToString(i);
}

sToPrintデフォルトのコンストラクターでは、変数に値を割り当てません。値をに設定してもnull値を取得するのはそのためですi

呼び出すと、次のようなCPrint(intvalue) 出力が得られます。次のように設定しているため、null にすることはできません。sToPrint

私はちょうど印刷しました... intvalue

メソッド内のグローバル変数の値を同じ名前で取得したい場合は、thisキーワードを使用できます。

 public CPrint(int i)
    {
        sToPrint = Convert.ToString(this.i); // will print 100 
    } // put break point here and check sToPrint value
于 2012-05-26T14:57:44.890 に答える
0

クラスの最上位に設定int i = 100;しても、コンストラクターは呼び出されません。実際、iはどこにも使用されていないので、その行を削除する必要があります。

class CPrint
{
    //int i = 100;     // i is not used anywhere
    string sToPrint;

これを解決する方法は、コンストラクターチェーンを使用することです。デフォルトのコンストラクターでは、適切なパラメーターを指定すると、別のコンストラクターを呼び出すことができます。

public CPrint() : this(100) 
{ 
}

public CPrint(int i) : this (Convert.ToString(i))
{
}

public CPrint(string s)
{
    sToPrint = s;
}
于 2012-05-26T15:52:27.347 に答える