-1

在此示例中,我初始化了一个变量整数并将整数值传递给参数化构造函数,然后我声明了一个实例方法,我想在其中打印字符串 vale,最后我在主程序中调用该方法。bur 当我打印它的值时它显示我 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. 如果你想要一些非空值,你需要调用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

根据您的代码,您只会在调用默认构造函数时获得空值。你可以做如下。

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

在默认构造函数中,您不会为sToPrint变量赋值。这就是为什么即使您将 value 设置为i

如果你打电话,CPrint(intvalue) 那么你应该得到如下输出。它不能为空,因为您将其设置为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 回答