1:定义类,不加修饰符默认的是 internal ?
2:定义类成员,不加修饰符默认的是 internal ?3: class Base
{
internal virtual void print(string str)
{
Console.WriteLine(str);
}
} class Cow : Base
{
internal override void print(string str)
{
Console.WriteLine("cowStr");
}
} class Program
{
static void Main(string[] args)
{
Cow cowClass = new Cow();
cowClass.print("abd");
Base baseClass = cowClass;
baseClass.print("abcd");
Cow cowClass2 = (Cow)baseClass;
cowClass2.print("ok");
Console.ReadKey();
}
上面Base, Cow 两个类在定义其成员时不加上 internal 就会出错。定义为成员不加修饰符,默认的不是 internal 吧。是 private 吗?Base baseClass = cowClass; //把基类型的变量赋于派生类型变量
baseClass.print("abcd"); //调用基类方法上面两句我注释的有错吗》
但是baseClass.print("abcd");所输出的结果为: cowStr, 还是调用的是cow类的方法啊。不清楚。
烦哪个朋友给讲下。
2:定义类成员,不加修饰符默认的是 internal ?3: class Base
{
internal virtual void print(string str)
{
Console.WriteLine(str);
}
} class Cow : Base
{
internal override void print(string str)
{
Console.WriteLine("cowStr");
}
} class Program
{
static void Main(string[] args)
{
Cow cowClass = new Cow();
cowClass.print("abd");
Base baseClass = cowClass;
baseClass.print("abcd");
Cow cowClass2 = (Cow)baseClass;
cowClass2.print("ok");
Console.ReadKey();
}
上面Base, Cow 两个类在定义其成员时不加上 internal 就会出错。定义为成员不加修饰符,默认的不是 internal 吧。是 private 吗?Base baseClass = cowClass; //把基类型的变量赋于派生类型变量
baseClass.print("abcd"); //调用基类方法上面两句我注释的有错吗》
但是baseClass.print("abcd");所输出的结果为: cowStr, 还是调用的是cow类的方法啊。不清楚。
烦哪个朋友给讲下。
2private,你在类里面写个成员,然后在另一个类里面引用,就会发现没有这个成员.
3这个地方用了override 而不是new,override重写新的基类方法,new隐藏了基类方法,因此override后不能再调用基类方法(因为已经被重写了嘛),
new后能调用基类方法.
我也是初学者,这是我的一些理解
改成class Cow : Base
{
internal new void print(string str)
{
Console.WriteLine("cowStr");
}
}
就能达到你要的效果了
baseClass.print("abcd");
这种是多态性的表现吧.可实现不了我所说的效果.
////确切的说,是把派生类的实例赋值给基类的指针(这里是引用)baseClass.print("abcd"); //调用基类方法
/////学C++的时候讲过的:通过基类的指针(这里是引用)调用虚方法时,其实是调用的基类指针指向的实例的方法。
这即是多态(在调用某一方法print("")时,不知道是调用的哪个实例的方法(这里是cowClass),完全可以在代码中修改baseClass.print("")所产生的结果);
看一下oo的东西,你就明白其中的原委了;
class Base
{
internal virtual void print(string str)
{
Console.WriteLine(str);
}
} class BigCow : Base
{
internal override void print(string str)
{
Console.WriteLine("I'm BigCow,I said:{0:d}",str);
}
}
class LittleCow : Base
{
internal override void print(string str)
{
Console.WriteLine("I'm LittleCow,I said:{0:d}",str); }
} class Program
{
static void Main(string[] args)
{
Base ACow=new BigCow()
ACow.print("hello");
Base BCow= new LittleCow()
BCow.print("hello");
//两头牛都对你说了“hello”,但是牛不同说的内容也不同
}
class Program
{
static void Main(string[] args)
{
Base ACow=new BigCow();
ACow.print("hello");
Base BCow= new LittleCow();
BCow.print("hello");
//两头牛都对你说了“hello”,但是牛不同说的内容也不同
}