P144页第三段中描述“无论字段是在声明的同时进行赋值,还是在声明之后进行赋值,C#编译器都要求在访问字段之前的某个时候,显示地对字段进行赋值,……。例如,如果在为employee1.Salary赋值之前调用if(employee1.Salary == "Too Littel"){……},就会造成编译器错误”。请问这句话是对的吗?说明:在此处emplyee1是一个类的实例对象。Salary是类的公有字段。

解决方案 »

  1.   

    显然是对的int i;
    if(i == 0)
    {
    }这样代码是对的,i默认就是0.
    但是编译器认为这样做是没有意义的,大多出现这样的代码是开发人员的疏忽,所以会提示。要先初始化。
      

  2.   

    对象要先初始化
    否则if(employee1!=null){}
      

  3.   

    To All of the above:
    作者的意思是不是说类中的字段(注意不是局部变量)如果没有赋值而直接使用,则C#编译器会报错?
      

  4.   

    To wuyq11,wuyazhe:
    请看清我的提问,谢谢。局部变量要赋初值这个当然对的,作者在书中的其它部分做了说明,我也没有什么疑问。只是作者的P144页这段话讲的是类中的字段的赋初值问题。我的测试代码表明:类中的字段如果没有赋值而直接使用,则C#编译器只会警告,而不会报错,和作者的描述有点出入。
      

  5.   

    道理是一样的。共有字段。看清楚
    字段和属性不同的。
    employee1.Salary
    和我给你的例子有什么不同的?你要懂得触类旁通。
      

  6.   

    测试代码:
    class Employee
    {
        public string FirstName;
        public string LastName;
        public string Salary;
    }
    class Program
    {
        static void Main()
        {
            Employee employee1 = new Employee();        if (employee1.Salary == null)
            {
                System.Console.WriteLine("Right");
            }        System.Console.ReadKey(true);
        }
    }
      

  7.   

    to wuyazhe
    以上代码,会有编译错误吗?
      

  8.   

    to wuyazhe:
    很感谢您的热心回答,但是我还是弱弱的问问,您有没有看清我的提问?
      

  9.   

    to wuyazhe:
    呵呵,很简单的问题我也不会放到这里请高手解答呀,呵呵。还是谢谢你呀,哈。
      

  10.   


    如果你这样说。我很抱歉。我想说的是。使用变量前要初始化,这句话是对的。你需要记住。但至于没有出现书上说的编译错误,并不是什么大不了的问题。书的编写可能依赖于某个编译器版本,也许那个版本的.net编译器是会如此检查。触类旁通的意思是要你明白其中有价值的:使用前要初始化。
    如果你觉得我回答的不对,我建议你下次不要抱着这种态度来提问,标题上不要写高手2个字。我的3个星星只表示热心。
      

  11.   

    to wuyazhe:
    不好意思呀,谢谢你的解答。