111,098
社区成员




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
MyBaseClass c = new MyDerivedClass();
Console.ReadLine();
}
}
public class MyBaseClass
{
public void MethodOne()
{
}
}
public class MyDerivedClass : MyBaseClass
{
public void MethodTwo()
{
}
}
}
MyDerivedClass c = new MyDerivedClass();
显然更具体一些。因为一个MyDerivedClass对象它本身“就是”一个MyBaseClass对象,只要知道这个道理用在设计中,那么没有必要在代码上搞这个。
假设写代码的人想说变量c的类型其实是不确定的(也就是说,根本不确定MyDerivedClass实例,可能随后就要改为另外一种MyBaseClass子类实例),那么才应该暂时这样写。
而教程中给你这样写,最大的可能就像你说的“程序是允许这样做”而已,因此是一个给初学者教学的示范。
真正懂的抽象的人,反而不会胡乱抽象代码。如果可以使用具体类型,那么就尽量使用具体类型。我们在开发中自然是声明的类型(和接口)越少越好,代码写得越少越好。代码可以重构,而不是一开始就搞抽象的东西。abstract class BaseClass
{
public abstract void Method();
}
class DerivedClass1
{
public override void Method() { Console.WriteLine("This is DerivedClass1"); }
}
class DerivedClass2
{
public override void Method() { Console.WriteLine("This is DerivedClass2"); }
}
class Worker
{
public static void Add(BaseClass obj) { obj.Method(); }
}
使用时:
BaseClass obj1 = new DerivedClass1();
Worker.Add(obj1);
BaseClass obj2 = new DerivedClass2();
Worker.Add(obj2);