《Essential C#3.0》中的一处疑似错误,请高手给我确认一下

swimmingfish2004 2010-07-05 08:36:19
P144页第三段中描述“无论字段是在声明的同时进行赋值,还是在声明之后进行赋值,C#编译器都要求在访问字段之前的某个时候,显示地对字段进行赋值,……。例如,如果在为employee1.Salary赋值之前调用if(employee1.Salary == "Too Littel"){……},就会造成编译器错误”。请问这句话是对的吗?说明:在此处emplyee1是一个类的实例对象。Salary是类的公有字段。
...全文
93 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
swimmingfish2004 2010-07-05
  • 打赏
  • 举报
回复
to wuyazhe:
不好意思呀,谢谢你的解答。
兔子-顾问 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 swimmingfish2004 的回复:]
“你要懂得触类旁通”,说这句话的人应该是高手呀。但不管你是不是高手,请在确实弄清楚之前,最好不要假装是高手。
[/Quote]

如果你这样说。我很抱歉。我想说的是。使用变量前要初始化,这句话是对的。你需要记住。但至于没有出现书上说的编译错误,并不是什么大不了的问题。书的编写可能依赖于某个编译器版本,也许那个版本的.net编译器是会如此检查。触类旁通的意思是要你明白其中有价值的:使用前要初始化。
如果你觉得我回答的不对,我建议你下次不要抱着这种态度来提问,标题上不要写高手2个字。我的3个星星只表示热心。
swimmingfish2004 2010-07-05
  • 打赏
  • 举报
回复
对不起,我说这句话时,还没有看到你的回复,不好意思呀。
swimmingfish2004 2010-07-05
  • 打赏
  • 举报
回复
“你要懂得触类旁通”,说这句话的人应该是高手呀。但不管你是不是高手,请在确实弄清楚之前,最好不要假装是高手。
兔子-顾问 2010-07-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 swimmingfish2004 的回复:]
to wuyazhe:
很感谢您的热心回答,但是我还是弱弱的问问,您有没有看清我的提问?
[/Quote]

我不知道你认为我哪里理解的不对。你的疑问句只有一句:请问这句话是对的吗?
我已经回答过了。并且测试。回复说可能书上描述的不太对。可能你还有其他的意思,我没看出来的。
swimmingfish2004 2010-07-05
  • 打赏
  • 举报
回复
to wuyazhe:
呵呵,很简单的问题我也不会放到这里请高手解答呀,呵呵。还是谢谢你呀,哈。
swimmingfish2004 2010-07-05
  • 打赏
  • 举报
回复
to wuyazhe:
很感谢您的热心回答,但是我还是弱弱的问问,您有没有看清我的提问?
兔子-顾问 2010-07-05
  • 打赏
  • 举报
回复
抱歉。我想当然了
可能书上错了。写的意思应该是会引发一个运行时错误。的确编译通过了。
swimmingfish2004 2010-07-05
  • 打赏
  • 举报
回复
to wuyazhe
以上代码,会有编译错误吗?
兔子-顾问 2010-07-05
  • 打赏
  • 举报
回复
局部变量你都明白要先初始化,这个类的公开的字段,难道不初始化直接用就对了么?这和局部变量不局部变量有什么关系。其实很简单一句话,书上也说了,使用任何变量前需要先初始化,不论是声明时初始化,还是后面单独初始化,都可以。不初始化就会报错。很明确了。
swimmingfish2004 2010-07-05
  • 打赏
  • 举报
回复
测试代码:
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);
}
}
兔子-顾问 2010-07-05
  • 打赏
  • 举报
回复
道理是一样的。共有字段。看清楚
字段和属性不同的。
employee1.Salary
和我给你的例子有什么不同的?你要懂得触类旁通。
swimmingfish2004 2010-07-05
  • 打赏
  • 举报
回复
To wuyq11,wuyazhe:
请看清我的提问,谢谢。

局部变量要赋初值这个当然对的,作者在书中的其它部分做了说明,我也没有什么疑问。只是作者的P144页这段话讲的是类中的字段的赋初值问题。

我的测试代码表明:类中的字段如果没有赋值而直接使用,则C#编译器只会警告,而不会报错,和作者的描述有点出入。

swimmingfish2004 2010-07-05
  • 打赏
  • 举报
回复
To All of the above:
作者的意思是不是说类中的字段注意不是局部变量)如果没有赋值而直接使用,则C#编译器会报错?

wuyq11 2010-07-05
  • 打赏
  • 举报
回复
对象要先初始化
否则if(employee1!=null){}
兔子-顾问 2010-07-05
  • 打赏
  • 举报
回复
显然是对的

int i;
if(i == 0)
{
}

这样代码是对的,i默认就是0.
但是编译器认为这样做是没有意义的,大多出现这样的代码是开发人员的疏忽,所以会提示。要先初始化。
特别 2010-07-05
  • 打赏
  • 举报
回复
编译时能不能检查出来不知道
不过运行时肯定是要出异常的
WTPMCheng 2010-07-05
  • 打赏
  • 举报
回复
你在VS中编译运行看看 应该就知道答案了~

110,577

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧