有一条语句如下:
FileStream Filestream = new FileStream(path, FileMode.Open, FileAccess.Read);为什么这条语句不报错?
从道理上说,第一个FileStream是类型名,第二个FileStream是“变量名”,二者不应该相同的,但是试了一下,这条语句不会报错啊,为什么?

解决方案 »

  1.   

    写错了,应该是下面的形式,定义的对象名和类型名完全一样:
    FileStream FileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
      

  2.   

    就像int,string,double这一类的不能重复,像你用的那种本身是方法的应该是可以重复的,好像有个说法来着NND太久不看书有点忘了就像FileStream 它本身是个class而不是变量所以可以重复来着具体内容有点记不清了讲出来该误导你了
      

  3.   


    意思是不是说,在编译上述语句时,编译器遇到第一个FileStream时会认定它是一个类型名,当遇到跟在其后的FileStream时,则会认为这是一个类型名,编译器会自动为其分配存储空间。但是这样又有一个问题,C#中的类型检查是怎么进行的,比若说如果是下面的语句的话编译器肯定会报错:int int a=0;在这样做的时候C#为什么不会“自动”认为第一个int是类型,而第二个int是变量名?
    在执行
    int int a=0;
    和FileStream Filestream = new FileStream(path, FileMode.Open, FileAccess.Read);
    时C#难道是执行的两种不同的类型检查规则吗?
      

  4.   

    VS里面好像所有东西都有一个唯一的隐藏的标识系统是根据那个标识来确定东西的前几天还看到个帖子声明一个butten可以new出来无数个按钮
      

  5.   

    跟你使用的.NET FrameWork有关  从2.0以后就没有这种问题了似乎
      

  6.   

    int int a = 0;
    怎么着也对应 
    FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
    你怎么数数的?
      

  7.   


    我的意思是,int是一个类型,FileStream也是一个类型,为什么编译器编译
    int int a = 0;时会报错,而编译
    FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
    就不报错。
      

  8.   

    int 是关键字。
    C#关键字列表
    http://msdn.microsoft.com/zh-cn/library/x53a06bb.aspx
      

  9.   


    int int a = 0;int 是关键字FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);第一个FileStream其实不单是FileStream,他前面还有命名空间的限定名的....
    第二个他只认为是个对象变量名...
      

  10.   

    FileStream FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
    你确认这个能编译?
      

  11.   

    额,楼主是个很细心的人,很爱学习的人。
    呵呵,先夸你一下,如果你想弄懂这个知识点的话,c#还是不好解释的,你需要一些底层的知识。
    为什么int作为关键字会报错呢?
    不知道楼主学过编译原理没有,其实具体的我也忘得差不多了,不过应该是在词法分析这一块包的错,
    就是你的输入里面有错误,这个要看具体的编译器如何设置哪些词是关键字,程序员不能用来定义变量的。至于你说FileStream FileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
    为什么不报错,我其实c#我接触的也不是很深,但是我知道c#和java差不多都是在虚拟机上面运行的,而这条语句,前面的一个FileStream是一个对象,后面的一个FileStream是一个指向FileStream的一个引用而已,也就是说它只是个名字,这也涉及到数值类型与引用类型的一些区别了。
    至于为什么可以这么定义,这个看vs吧,它可以报错也可以不报错,看vs的设置。楼主如果想深究这些只是的话,不如直接去学习一些底层的东西,到时候你猜都能猜个大概,为什么会出现这种情况了。
      

  12.   

    看了半天,是你在12楼给人家多加了个fs...没有那个fs是没错的...
      

  13.   

    lz用 int int a = 0; 类比,是一回事么?
      

  14.   

    LZ不要大惊上取, 我下面再来几个例子你看看     StringBuilder StringBuilder = new StringBuilder();
         String String = new String('3',3);
    这些全部可以编绎, 如果我想知道为什么可以正确编绎,你得去看底层了, 尤其是数据类型,基本数据类型,强数据类型,等等相关知识,保证你就明白,  其实前面的系统默认为加上命名空间的, 仅接着后面声明的当然只能是变量名,比如   Class1 cl =new Class1()  Class1 系统当前知道是一个类或者说一个类型,而 cl 在语言的方法中这个不管你定义神马一定是 Class1 的一个别名, 哪怕你定义一样的,还是一个意思,。
      

  15.   


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

  16.   

    刚才编写了一段读取文本文件中字符的代码,如下:            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.”
    程序运行结果为
      

  17.   

    FileStream 是变量  int是关键字  能一样么