CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

这是不是C#的bug?

楼主littertiger(小虎)2003-10-03 09:06:41 在 .NET技术 / C# 提问

这个自动类型转换应不应该?  
  using   System;  
  namespace   ConsoleApplication3  
  {  
    class   Base  
    {  
      private   int   m=2;  
      public   int   GetM(Parent   p){return   p.m;}//查看返回的m是父类还是基类的  
    }  
    class   Parent:Base  
    {  
      private   int   m=3;  
    }  
    class   test  
    {  
      public   static   void   Main()  
      {  
        Base   b=new   Base();  
        Parent   p=new   Parent();  
        int   r=b.GetM(p);     //事实证明返回的是基类的m  
      }  
    }  
  }  
  我感觉这里编译器处理的不好,不应该自动进行类型转换,应该报错无权访问。  
  如果自动转换,很容易造成混乱。  
   
  某人的看法:  
  这个在语义上确实容易让人混淆  
   
  但是代码确实是在base内部,访问私有变量也是理所当然,报错就牺牲了灵活性了  
   
  如果报错的话,base确实需要访问私有的m怎么办?  
   
  它也并没有违背大的原则  
   
  要是访问到了parent内部的m就不正确了  
   
  在定义parent类中的m的时候就应该想到这个m和base中的m完全没有一点关系  
   
  甚至如果你没有看到base的代码,你根本不知道你的m和父类中的m重复了  
   
  这时,如果父类访问到了子类中的m,是不是会造成麻烦?  
   
  一样的C#,可以写出让人摸不着头脑的代码,也可以写出十分清晰易懂的代码,避免混  
  乱的关键在于我们自己  
   
  下面是我的回复:  
  我想知道为什么把我上一个相同的回复删除?下面是又一个  
  我还是坚持原有的看法。  
  如你所说,我在parent类中加入m,甚至就不知道base里面也有m,无法顾忌到base,在  
  面向对象的思想中,也是不应该随便顾忌本对象之外的对象。  
  你似乎没有认识到我说的关键,我说的关键是隐式类型转换发起原因,在c++中,原因  
  只有一个,就是类型匹配,在这里它不是类型匹配,而是这样的:当一个父类想要进行  
  一个操作时,如果这个操作不存在或无法进行,它会自动试图访问子类的同名操作,也  
  是说它进行了隐式的类型转换。  
  这是不应该的,因为很容易看到,我写GetM的初衷是想访问parent里面的m,而不是  
  base里面的m。如果如此随便的进行隐式类型转换,然人感到我现在到底在对谁操作,  
  父类还是子类?  
  如你说说,为了灵活性,如果要访问base里面的东西,可以进行显式类型转换。  
   
  问题点数:0、回复次数:0Top

相关问题

  • 这个是不是C#的一个Bug?
  • 请教这是不是c++builder的bug!
  • c++builder 的bug?
  • C++BUILDER6。0的BUG。
  • 这是一个c的bug吗?有兴趣的看一看!
  • 发现 C++ Builder 6.0 的 BUG , 不知道是否属实!
  • C++Builder6 Bug 一大堆
  • 高分!!!!dev-c++ 的bug!!!!
  • c++6 的一个bug
  • C # 不是这样的吧 !!!

关键词

  • c#
  • 转换
  • 代码
  • 隐式
  • 类
  • 子类
  • 类型转换
  • 报错
  • getm
  • 访问

得分解答快速导航

  • 帖主:littertiger

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo