多态的理解

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

// 用基类实例化

namespace ConsoleApplication21
{

   

    class Program
    {

        public abstract class A
        {
            public virtual void C()
            {
                Console.WriteLine("A IS");
            }
            public virtual void Fun()
            {
                Console.WriteLine("A.Fun()");
            }
        }

        public class B : A
        {
            public override void C() 
            {
                Console.WriteLine("B IS ");
            }

            public B()
            {
                Console.WriteLine('B');
            }
            public new void Fun() 
            {
                Console.WriteLine("B.Fun()");
            }


            public void hello()
            {
                Console.WriteLine("hello");
            }
        }

 

        public class D : A
        {
            public override void C() 
            {
                Console.WriteLine("D IS ");
            }

            public D()
            {
                Console.WriteLine('D');
            }
            public override void Fun() 
            {
                Console.WriteLine("D.Fun()");
            }


            public void hello()
            {
                Console.WriteLine("hello");
            }
        }

        public static void Main()
        {
            A a = new D();
            a.C();
            a.Fun();
            Console.ReadKey();
                     
            A a1 = new B();
            a1.C();
            a1.Fun();
            Console.ReadKey();

            B b = new B();
            b.C();
            b.Fun();

            b.hello()
           
        }
    }

}

 

 

 

 

 

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{


class Class1
{
private string str = "Class1.str";
private int i = 0;
static void StringConvert(string str)
{ str = "string being converted."; }
static void StringConvert(Class1 c)
{ c.str = "string being converted."; }

static void Add(int i) { i++; }

static void AddWithRef(ref int i)
{ i++; }

static void Main()
{
int i1 = 10; int i2 = 20;
string str = "str";
Class1 c = new Class1();
Add(i1);
AddWithRef(ref i2);
Add(c.i);
StringConvert(str);
StringConvert(c);
Console.WriteLine(i1);
Console.WriteLine(i2);
Console.WriteLine(c.i);
Console.WriteLine(str);
Console.WriteLine(c.str);
Console.ReadKey();
}
}

}


-----------------
10
21
0
str
string being converted

 

---------------------------

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{

public abstract class A
{
public A() { Console.WriteLine('A'); } //10
public virtual void Fun() { Console.WriteLine("A.Fun()"); }//17
}

class Program : A
{
public Program()//16
{
Console.WriteLine('B');//18
}
public new void Fun()
{
Console.WriteLine("B.Fun()");
}
static void Main(string[] args)
{
A a = new Program();
// 先16,转10输出A,再17,18输出B,
a.Fun();
// 转17输出11
Console.ReadKey();
}
}
}

 

-----------------

 

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{

public class A
{
public virtual void Fun1(int i) //10行
{
Console.WriteLine(i);
}
public void Fun2(A a)
{
a.Fun1(1); //16行
Fun1(5); //17行
}
}
public class B : A
{
public override void Fun1(int i)//22行
{
base.Fun1(i + 1); //24行
}
public static void Main()
{
B b = new B(); // 走下面
A a = new A(); // 继续走下
a.Fun2(b);
// 先走A.F2进入16行 由于a.fun1被重B写了,转22,到24的时候base.fun1此时i=2,转第10行输入2
// 接着走17行 , 自调进入10行 输入5
b.Fun2(a);
// 进16传1 先走10行 输出1
// 进17转22行 返回个5+1 再转10输出6
Console.ReadKey();
}
}


}

结果
2
5
1
6

---------------------------

 

Question 33. (单选)
  int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是(4)。
  1. 9
  2. 2
  3. 6
  4. 越界

 

Question 40. (单选)
class Class1
{
public static int Count = 0;
static Class1()
{
Count++;
}
public Class1()
{
Count++;
}
}
Class1 o1 = new Class1();
Class1 o2 = new Class1();
  请问,Class1.Count的值是多少?(3 )
   1. 1
   2. 2
   3. 3
   4. 4

abstract class BaseClass
{
public virtual void MethodA()
{
Console.WriteLine("BaseClass");
}
public virtual void MethodB()
{
}
}
class Class1: BaseClass
{
public void MethodA()
{
Console.WriteLine("Class1");
}
public override void MethodB()
{
}
}
class Class2: Class1
{
new public void MethodB()
{
}
}
class MainClass
{
public static void Main(string[] args)
{
Class2 o = new Class2();
o.MethodA();
}
}
  请问,此程序输出结果是:  3
   1. BaseClass
   2. BassClass Class1
   3. Class1
   4. Class1 BassClass

 


public static void Main(string[] args)
{
int i = 2000;
object o = i;
i = 2001;
int j =(int) o;
Console.WriteLine("i={0},o={1}, j={2}",i,o,j);
}

此程序输出结果是 : 1
   1. i=2001,o=2000,j=2000
   2. i=2001,o=2001,,j=2001
   3. i=2000,o=2001,,j=2000
   4. i=2001,o=2000,j=2001


public abstract class A
{
public A()
{
Console.WriteLine('A');
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
}
public class B: A
{
public B()
{
Console.WriteLine('B');
}
public new void Fun()
{
Console.WriteLine("B.Fun()");
}
public static void Main()
{
A a = new B();
a.Fun();
}
}

此程序输出结果是 : 1

   1. A B A.Fun()
   2. A B B.Fun()
   3. B A A.Fun()
   4. B A B.Fun()


 

posted @ 2009-06-24 23:22  Ry5  阅读(315)  评论(0编辑  收藏  举报