妈的,老子忍不住想骂,比尔.盖茨,什么吊C#新语言,语言清析透明.
我以前是搞java的,本来想多学一分语言的,选择了C#,没想到,唉,
就连下面的这个程序,都让常人无法理解.
using System;
class A
{   protected int age=10;
public static void Main(String[]args)
{
B b=new B();
Console.WriteLine(b.age);//请问一下此时怎么输出10,应当是11才对啊?
}
}
class B:A
{
new protected int age=11;
}
如果B类中不用new的话提示,必须用new说明父类中的age已经被继承了,所以我又加了new之后Console输出怎么还是10?
先说到这吧,吃饭去了,回来再讨论                      

解决方案 »

  1.   

    连public private protected 还没学通就出来骂街了什么人嘛
      

  2.   

    不要太那个。。JAVA很好。C#也很好。我越来越喜欢C#了
      

  3.   

    new protected int age,屏蔽基类的age字段,而在基类中实例化B,调用B.age实际上调用的是A.age,因此结果是10,如果改为new public int age,结果就为11,至于原因就不多说了.像LZ这样基类调用子类,会把自己绕进去,还是找一些常见的用法来学飞C#语法.
      

  4.   

    怎么全看笑话了,难道就没有一位能站出来帮我说一下其中的原因的吗?>在此特别感谢上面的:"Bote_China() "朋友,等待中.................................
      

  5.   

    楼上的:Bote_China() 说:如果改为new public int age,结果就为11
    我测试了果然可以啊,但是我不明白,protected 修饰符在同一类也是可以访问的啊?
    为什么换成protected就输出10了呢/不懂.
      

  6.   

    因为protected访问修饰符只能在本类和其子类中访问....
    楼主的main方法就在A中....而B的age却是protected的...
    这时恰好B又继承了A,
    ....所以b.age并不是访问b的age属性..
    而是本类中的age....
      

  7.   

    谢谢你zh_li_
    事实证明c#中子类中的protected 修饰的成员父类中是不能名够访问的,这在java当中是可以的,
    现在看来一个人学两种不同风格的语言,确实有点难度.
      

  8.   

    证明的例子如下:
    using System;
    class A
    {  
    public static void Main(String[]args)
    {
    B b=new B();
    Console.WriteLine(b.name);
    }
    }
    class B:A
    {
    protected string name="江苏";
    }
      

  9.   

    你有一颗浮躁的心,估计你的java学的也不怎么样吧?
      

  10.   

    又不是 Bill 设计的 C#
      

  11.   

    C# 在美协方面确实比Java好,
      

  12.   

    C# 在某些方面确实比Java好,
      

  13.   

    xiongchenyan() ( ) 信誉:100  2007-07-22 14:48:36  得分: 0  
    事实证明c#中子类中的protected 修饰的成员父类中是不能名够访问的,这在java当中是可以的,
    现在看来一个人学两种不同风格的语言,确实有点难度.
    ===================================================================================
       父类访问子类的成员,我觉得没有多少实际意义,另外别老拿java说事,就你这个学习态度,java肯定也不咋地!
      
     
      

  14.   

    C#的首席设计师是Anders hejlsberg 吧
    以前在Borland公司,Delphi1,Delphi2都是他主持设计的.
    97年左右,Borland公司的创始人被Borland开除了.
    M$请了Anders hejlsberg两次,他没去.
    后来被Bill开着加长的轿车到Borland门口,亲自游说,才把他给挖到MS了.
      

  15.   

    难怪C#这么差.原来是不Bill亲自开发的...vb就不同了...
      

  16.   

    lz把main方法写在B里面试试,然后再考虑一下是谁的问题。
      

  17.   

    c++, java , C# 我都用过. c++用得最多,java其次,c#次次之我个人觉得c#在语法更接近c++.
    C++的子类和父类中的同名方法,c++和c#的语义是,子类的方法隐藏父类的。
    但显示注明virtual关键字时子类方法才是重写父类方法,实现多态。java的语义是子类默认重写父类方法实现多态。c++和c#中要区分容易混淆的overload, override, hide 的概念。特别是overload和override,很多c++和c#书中都弄错,特别是早期的c++书,包括大名鼎鼎的潘爱民译的vc++技术内幕第三版呢还是第四版。
      

  18.   

    class B:A
    {
    new protected int age=11;
    }
    new protected int age=11;如果不加new,那么它的作用将会是是隐藏A中的public int age,当然编译器不允许。在java里面子类可以隐藏这样父类的属性么?
      

  19.   

    基本功不够扎实,如果规则都一样,C#就不是C#,而是Java了
      

  20.   

    晕了,两种语法非常相似
    学JAVA,难道搞不定C#?奇了怪了
      

  21.   


      C sharp 不是为你设计的!
      

  22.   

    C# 我喜欢,使C的一种回归,Java反而太多了,门门齐,反而无用武之地。
      

  23.   

    哥们是对.Net继承类执行的方式不明白而已,多看看资料就明白了