2012-05-26 84 views
-1

在这里,在这个例子中,我已经初始化的变量整数,并通过整数值参数化的构造函数再后来,我宣布,我要打印字符串淡水河谷则实例方法终于我打电话的主要程序,方法。 bur当我打印它的值时显示NULL值,为什么?为什么sToString显示空值

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(); 
    } 
} 
+0

此代码将打印“Hello”。它是正确的。你是否向我们展示了正确的代码? – usr

+1

@usr,代码是由其他用户编辑,我已经恢复它 – wimh

+0

这是一个误导性的编辑! – usr

回答

2

你在你的主要方法,它不执行任何使用CPrint()构造。所以,sToPrint尚未初始化,因此它是null。如果你想一些非空值,你就需要调用CPrint(String)CPrint(int)构造。

e.g,

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

它将打印 “Hello”

+0

@Javaid malik我在下面发表您的评论,请不要编辑评论的答案。报价:在这里我没有调用空构造函数,我打电话给参数的构造函数,然后我把整数转换为字符串值应该是100不是空值? – wimh

2

根据你的代码,当你调用默认的构造函数,你将只能得到空值。你可以做如下。

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

在默认的构造函数没有分配值sToPrint变量。这就是为什么你得到零值,即使你设置的值为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 
+0

在你的评论中,你告诉我,我打电话给默认的构造函数,根本没有。我打电话的参数化的构造函数需要一个参数,那么为什么它显示一个空值 –

+0

您呼叫'CPrint()'?不是吗? – Damith

+0

公共CPrint(int i)以 { sToPrint = Convert.ToString(this.i); //将打印100 }当我调试此代码SToPrint值== null为什么? –

0

设置int i = 100;在类的顶部不调用构造函数。事实上,我没有使用任何地方,所以你应该删除该行。

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

解决这一点的方法是使用constructor chaining;在默认构造函数中,当您提供适当的参数时,可以调用另一个构造函数:

public CPrint() : this(100) 
{ 
} 

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

public CPrint(string s) 
{ 
    sToPrint = s; 
}