妈的,老子忍不住想骂,比尔.盖茨,什么吊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?
先说到这吧,吃饭去了,回来再讨论
我以前是搞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?
先说到这吧,吃饭去了,回来再讨论
我测试了果然可以啊,但是我不明白,protected 修饰符在同一类也是可以访问的啊?
为什么换成protected就输出10了呢/不懂.
楼主的main方法就在A中....而B的age却是protected的...
这时恰好B又继承了A,
....所以b.age并不是访问b的age属性..
而是本类中的age....
事实证明c#中子类中的protected 修饰的成员父类中是不能名够访问的,这在java当中是可以的,
现在看来一个人学两种不同风格的语言,确实有点难度.
using System;
class A
{
public static void Main(String[]args)
{
B b=new B();
Console.WriteLine(b.name);
}
}
class B:A
{
protected string name="江苏";
}
事实证明c#中子类中的protected 修饰的成员父类中是不能名够访问的,这在java当中是可以的,
现在看来一个人学两种不同风格的语言,确实有点难度.
===================================================================================
父类访问子类的成员,我觉得没有多少实际意义,另外别老拿java说事,就你这个学习态度,java肯定也不咋地!
以前在Borland公司,Delphi1,Delphi2都是他主持设计的.
97年左右,Borland公司的创始人被Borland开除了.
M$请了Anders hejlsberg两次,他没去.
后来被Bill开着加长的轿车到Borland门口,亲自游说,才把他给挖到MS了.
C++的子类和父类中的同名方法,c++和c#的语义是,子类的方法隐藏父类的。
但显示注明virtual关键字时子类方法才是重写父类方法,实现多态。java的语义是子类默认重写父类方法实现多态。c++和c#中要区分容易混淆的overload, override, hide 的概念。特别是overload和override,很多c++和c#书中都弄错,特别是早期的c++书,包括大名鼎鼎的潘爱民译的vc++技术内幕第三版呢还是第四版。
{
new protected int age=11;
}
new protected int age=11;如果不加new,那么它的作用将会是是隐藏A中的public int age,当然编译器不允许。在java里面子类可以隐藏这样父类的属性么?
学JAVA,难道搞不定C#?奇了怪了
C sharp 不是为你设计的!