请问下一下为什么下面的语句不报错

stonemqy 2011-03-07 09:54:24
有一条语句如下:
FileStream Filestream = new FileStream(path, FileMode.Open, FileAccess.Read);

为什么这条语句不报错?
从道理上说,第一个FileStream是类型名,第二个FileStream是“变量名”,二者不应该相同的,但是试了一下,这条语句不会报错啊,为什么?
...全文
269 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
剑指苍穹 2011-03-07
  • 打赏
  • 举报
回复

int int a = 0;

int 是关键字

FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);

第一个FileStream其实不单是FileStream,他前面还有命名空间的限定名的....
第二个他只认为是个对象变量名...
  • 打赏
  • 举报
回复
大家都好有闲情逸致啊 佩服
aofengdaxia 2011-03-07
  • 打赏
  • 举报
回复
本年度本季节见过最蛋疼的帖子。
vrhero 2011-03-07
  • 打赏
  • 举报
回复
C#中,只有关键字不允许直接做为变量标识...但是你这种写法编译器虽然可以容忍,人不应该容忍...
拿凤姐抵债 2011-03-07
  • 打赏
  • 举报
回复
int 是关键字。
C#关键字列表
http://msdn.microsoft.com/zh-cn/library/x53a06bb.aspx
stonemqy 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 caozhy 的回复:]
int int a = 0;
怎么着也对应
FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
你怎么数数的?
[/Quote]

我的意思是,int是一个类型,FileStream也是一个类型,为什么编译器编译
int int a = 0;
时会报错,而编译
FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
就不报错。
threenewbee 2011-03-07
  • 打赏
  • 举报
回复
int int a = 0;
怎么着也对应
FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
你怎么数数的?

wangoqoq 2011-03-07
  • 打赏
  • 举报
回复
跟你使用的.NET FrameWork有关 从2.0以后就没有这种问题了似乎
嗳嘉 2011-03-07
  • 打赏
  • 举报
回复
VS里面好像所有东西都有一个唯一的隐藏的标识系统是根据那个标识来确定东西的前几天还看到个帖子声明一个butten可以new出来无数个按钮
stonemqy 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 caozhy 的回复:]
因为C# 2.0以后编译器比较智能。它可以根据上下文推定出类以及实例。

但是除非必要,不要使用这样的写法。
[/Quote]

意思是不是说,在编译上述语句时,编译器遇到第一个FileStream时会认定它是一个类型名,当遇到跟在其后的FileStream时,则会认为这是一个类型名,编译器会自动为其分配存储空间。但是这样又有一个问题,C#中的类型检查是怎么进行的,比若说如果是下面的语句的话编译器肯定会报错:

int int a=0;

在这样做的时候C#为什么不会“自动”认为第一个int是类型,而第二个int是变量名?
在执行

int int a=0;


FileStream Filestream = new FileStream(path, FileMode.Open, FileAccess.Read);

时C#难道是执行的两种不同的类型检查规则吗?
嗳嘉 2011-03-07
  • 打赏
  • 举报
回复
就像int,string,double这一类的不能重复,像你用的那种本身是方法的应该是可以重复的,好像有个说法来着NND太久不看书有点忘了就像FileStream 它本身是个class而不是变量所以可以重复来着。。。具体内容有点记不清了讲出来该误导你了
threenewbee 2011-03-07
  • 打赏
  • 举报
回复
因为C# 2.0以后编译器比较智能。它可以根据上下文推定出类以及实例。

但是除非必要,不要使用这样的写法。
stonemqy 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jingjiting26 的回复:]
好像只有变量名不能跟类型名重复的说
[/Quote]

????
能详细说说吗?
嗳嘉 2011-03-07
  • 打赏
  • 举报
回复
好像只有变量名不能跟类型名重复的说
stonemqy 2011-03-07
  • 打赏
  • 举报
回复
写错了,应该是下面的形式,定义的对象名和类型名完全一样:
FileStream FileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
ivorstar 2011-03-07
  • 打赏
  • 举报
回复
大小写不一样?
wqandxxj 2011-03-07
  • 打赏
  • 举报
回复
FileStream 是变量 int是关键字 能一样么
stonemqy 2011-03-07
  • 打赏
  • 举报
回复
刚才编写了一段读取文本文件中字符的代码,如下:

string path = @"C:\testCSharp.txt";
string input = "";
StreamReader myStreamReader = new StreamReader(path);

while ((input = myStreamReader.ReadLine()) != null)
{
Console.Write(input);
}

myStreamReader.Close();
Console.Read();

其中testCSharp.txt放了一句话“I am a C# freshman.”
程序运行结果为
stonemqy 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 caozhy 的回复:]
引用 23 楼 stonemqy 的回复:
引用 20 楼 pittroll 的回复:
引用 19 楼 caozhy 的回复:
FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);


你确认这个能编译?

这个不能编译的。


完全可以编译

你用神马编译的?
[/Quote]

关键的句子应该改一下,没注意看,呵呵
FileStream FileStream = new FileStream(path, FileMode.Open, FileAccess.Read);

这样就对了。
vrhero 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 caozhy 的回复:]
lz用 int int a = 0; 类比,是一回事么?
[/Quote]
哦,没注意看,9楼还有那么一出,呵呵...估计是楼主一急写错了...
加载更多回复(9)

110,538

社区成员

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

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

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