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类的方法啊。不清楚。
烦哪个朋友给讲下。

解决方案 »

  1.   

    1是
    2private,你在类里面写个成员,然后在另一个类里面引用,就会发现没有这个成员. 
    3这个地方用了override 而不是new,override重写新的基类方法,new隐藏了基类方法,因此override后不能再调用基类方法(因为已经被重写了嘛),
    new后能调用基类方法.
    我也是初学者,这是我的一些理解
      

  2.   

    "但是baseClass.print("abcd");所输出的结果为: cowStr,  还是调用的是cow类的方法啊。不清楚。"
    改成class Cow : Base
        {
            internal new void print(string str)
            {
                Console.WriteLine("cowStr");
            }
        }
    就能达到你要的效果了
      

  3.   

    谢谢楼上朋友.我不明白多态性.            Base baseClass = cowClass;
                baseClass.print("abcd");
    这种是多态性的表现吧.可实现不了我所说的效果.
      

  4.   

    Base baseClass = cowClass;  //把基类型的变量赋于派生类型变量 
    ////确切的说,是把派生类的实例赋值给基类的指针(这里是引用)baseClass.print("abcd");  //调用基类方法 
    /////学C++的时候讲过的:通过基类的指针(这里是引用)调用虚方法时,其实是调用的基类指针指向的实例的方法。
    这即是多态(在调用某一方法print("")时,不知道是调用的哪个实例的方法(这里是cowClass),完全可以在代码中修改baseClass.print("")所产生的结果);
      

  5.   

    baseClass.print("abcd");调用的是cowClass.print("")的方法,
    看一下oo的东西,你就明白其中的原委了;
      

  6.   


        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”,但是牛不同说的内容也不同
            }
      

  7.   


    class Program
        {
            static void Main(string[] args)
            {
                Base ACow=new BigCow();
                ACow.print("hello");
                Base BCow= new LittleCow();
                BCow.print("hello");
    //两头牛都对你说了“hello”,但是牛不同说的内容也不同
            }
      

  8.   

    成员不加访问修饰默认为 private
      

  9.   

    我觉得第三个问题的关键是重写override 而不是new隐藏方法,所以没有办法调用基类的原始方法