有一条语句如下:
FileStream Filestream = new FileStream(path, FileMode.Open, FileAccess.Read);为什么这条语句不报错?
从道理上说,第一个FileStream是类型名,第二个FileStream是“变量名”,二者不应该相同的,但是试了一下,这条语句不会报错啊,为什么?
FileStream Filestream = new FileStream(path, FileMode.Open, FileAccess.Read);为什么这条语句不报错?
从道理上说,第一个FileStream是类型名,第二个FileStream是“变量名”,二者不应该相同的,但是试了一下,这条语句不会报错啊,为什么?
FileStream FileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
意思是不是说,在编译上述语句时,编译器遇到第一个FileStream时会认定它是一个类型名,当遇到跟在其后的FileStream时,则会认为这是一个类型名,编译器会自动为其分配存储空间。但是这样又有一个问题,C#中的类型检查是怎么进行的,比若说如果是下面的语句的话编译器肯定会报错:int int a=0;在这样做的时候C#为什么不会“自动”认为第一个int是类型,而第二个int是变量名?
在执行
int int a=0;
和FileStream Filestream = new FileStream(path, FileMode.Open, FileAccess.Read);
时C#难道是执行的两种不同的类型检查规则吗?
怎么着也对应
FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
你怎么数数的?
我的意思是,int是一个类型,FileStream也是一个类型,为什么编译器编译
int int a = 0;时会报错,而编译
FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
就不报错。
C#关键字列表
http://msdn.microsoft.com/zh-cn/library/x53a06bb.aspx
int int a = 0;int 是关键字FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);第一个FileStream其实不单是FileStream,他前面还有命名空间的限定名的....
第二个他只认为是个对象变量名...
你确认这个能编译?
呵呵,先夸你一下,如果你想弄懂这个知识点的话,c#还是不好解释的,你需要一些底层的知识。
为什么int作为关键字会报错呢?
不知道楼主学过编译原理没有,其实具体的我也忘得差不多了,不过应该是在词法分析这一块包的错,
就是你的输入里面有错误,这个要看具体的编译器如何设置哪些词是关键字,程序员不能用来定义变量的。至于你说FileStream FileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
为什么不报错,我其实c#我接触的也不是很深,但是我知道c#和java差不多都是在虚拟机上面运行的,而这条语句,前面的一个FileStream是一个对象,后面的一个FileStream是一个指向FileStream的一个引用而已,也就是说它只是个名字,这也涉及到数值类型与引用类型的一些区别了。
至于为什么可以这么定义,这个看vs吧,它可以报错也可以不报错,看vs的设置。楼主如果想深究这些只是的话,不如直接去学习一些底层的东西,到时候你猜都能猜个大概,为什么会出现这种情况了。
String String = new String('3',3);
这些全部可以编绎, 如果我想知道为什么可以正确编绎,你得去看底层了, 尤其是数据类型,基本数据类型,强数据类型,等等相关知识,保证你就明白, 其实前面的系统默认为加上命名空间的, 仅接着后面声明的当然只能是变量名,比如 Class1 cl =new Class1() Class1 系统当前知道是一个类或者说一个类型,而 cl 在语言的方法中这个不管你定义神马一定是 Class1 的一个别名, 哪怕你定义一样的,还是一个意思,。
关键的句子应该改一下,没注意看,呵呵
FileStream FileStream = new FileStream(path, FileMode.Open, FileAccess.Read);这样就对了。
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.”
程序运行结果为