-1

尝试了解 OOP 的所有力量

创建 3 个类

class A
{
     public string Foo()
    {
        return "A";
    }
}

class B:A
{

    public string Foo1()
    {
        return "a";
    }
}

class Program
{
   static void Main(string[] args)
    {
        A a = new B(); //can use method just from a
        B b = new B(); //both
        A aa = new A(); //just from a
        string result = b.Foo();
        string n = ((A)b).Foo().ToString();
    }
}

目前尝试了解 A a = new B(); 之间的区别 和 A a = new A(); - 尝试使用它 - 可以使用类中的相同方法 - 参见图片

在此处输入图像描述

也尝试了解beetwen有什么区别

B b = new B();
((A)b).Foo();

A a = new B(); 
b.Foo();

A a =(А) new B(); and A a = new A();

也尝试找到解释 OOP 主要原理的好教程,但仍有一些问题。谢谢大家的理解

4

3 回答 3

4

最简单的区别是:

A a = new B();
B b = (B) a;  // works!
A a = new A();
B b = (B) a;  // compiler error

即使您将Binstance分配给A-typed 变量,它仍然是B类的实例,因此您可以将其强制转换回B.

但这只是一个简单的例子。virtual当你的类有方法 时,真正的差异就会出现

class A
{
    public virtual void Foo()
    {
        Console.WriteLine("A : Foo();");
    }
}

overriden

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

和/或隐藏:

class C : A
{
    public new void Foo()
    {
        Console.WriteLine("C : Foo();");
    }
}

在派生类中。使用该类声明,您将获得以下结果:

{
    A a = new A();
    B b = new B();
    C c = new C();

    a.Foo();  // prints A : Foo();
    b.Foo();  // prints B : Foo();
    c.Foo();  // prints C : Foo();
}

{
    A a = new A();  // prints A : Foo();
    A b = new B();  // prints B : Foo();
    A c = new C();  // prints A : Foo();

    a.Foo();
    b.Foo();
    c.Foo();
}

这更有趣,不是吗?您应该阅读更多关于覆盖和隐藏方法以及一般类继承的信息。

于 2013-09-03T19:20:33.080 回答
3
A a = new A();

创建一个新的实例A并将其保存在一个A变量中。您可以访问A.

A b = new B();

创建一个新的实例B并将其保存在一个A变量中。您只能访问由A.

不同的是这...

B c = (B) b;

仅当 varb最初实例化为B或子类时,此行才有效。否则会抛出异常

于 2013-09-03T19:16:17.720 回答
3
Class B is extending from Class A,

所以B -- 是 A --> A

        A a = new B(); // B IS A --> A, has a reference of A but object of B,
                       // hence can use method just from a
        B b = new B(); // B is an instance of B which is an A, hence both
        A aa = new A(); // A is a super class here, subclass instance cannot access 
                        // so just from a

希望这可以帮助。

于 2013-09-03T19:19:26.453 回答