【发布时间】:2017-08-15 15:02:07
【问题描述】:
我对接口/抽象类/类有相当的理解,但只是试图理解其他东西。看下面的代码:
namespace AbstractClassExample
{
class Program
{
static void Main(string[] args)
{
BaseEmployee fullTimeEmployee = new FullTimeEmployee();
BaseEmployee contractEmployee = new ContractEmployee();
}
}
public abstract class BaseEmployee
{
public string EmployeeID { get; set; }
public string EmployeeName { get; set; }
public string EmployeeAddress { get; set; }
public abstract double CalculateSalary(int hoursWorked);
}
public class FullTimeEmployee : BaseEmployee
{
public override double CalculateSalary(int hoursWorked)
{
//do something
}
}
public class ContractEmployee : BaseEmployee
{
public override double CalculateSalary(int hoursWorked)
{
//do something
}
}
}
但是我没能做到以下几点(第一种方法):
BaseEmployee fullTimeEmployee = new FullTimeEmployee();
BaseEmployee contractEmployee = new ContractEmployee();
为什么不这样写(第二种方法):
FullTimeEmployee fullTimeEmployee = new FullTimeEmployee();
完全可以使用第二种方法,因为它会起作用。工作中的任何开发人员如何知道上述抽象类是否在 DLL 中。当您与您一起编写代码或某种文档时,可能会使用第一种方法。不是吗?
类似的例子也适用于接口声明。喜欢:
interface IPointy {
void MyMethod();
}
class Pencil : IPointy {
void MyMethod() {
}
void MyOtherMethod() {
}
}
IPointy itPt = new Pencil();
第一种方法不是让它变得复杂吗?有什么好的做法?第一和第二的任何好的做法和坏的做法?
【问题讨论】:
-
你可以阅读
SOLID Design Principals。具体Dependency injection/Inversion of Control
标签: c# interface abstract-class