假设我们的设计是基于三层架构,现在我们想在服务层/业务逻辑层曾加一些功能,可以说是一些新的函数, 我们会把相对应的类进行扩展而不必修改原类的类的任何代码,避免不必要的出错。
原来的类:
namespace DoWork
{
public class DoWork
{
private Action<string> Action;
public static DoWork Create()
{
return new DoWork();
}
public DoWork GetAction(Action<string> action)
{
Action = action;
return this;
}
public DoWork DoAction()
{
if (Action != null)
{
Action("Done!");
}
return this;
}
}
}
类的扩展:
1. 首先创建一个类,命名空间跟旧的类一样
2. 这个类必须是static的, 往后会解释
3. 参数类型是一个泛型,返回值也是一个泛型。我在这里输入的参数就是原本的类的实体
4. default(Tobj)就是如果为空就取默认值
namespace DoWork
{
public static class DoWorkExtension
{
public static Tobj DoAnotherWork<Tobj>(this DoWork doWork)
{
Console.WriteLine("Hi");
return default(Tobj);
}
}
}
如何调用:
static void Main(string[] args)
{
obj dt = new obj();
var result = DoWork.DoWork.Create()
.GetAction(x => Console.WriteLine(x))
.DoAction()
.DoAnotherWork<obj>();
Console.ReadKey();
}
public class obj
{
public string Name
{
get; set;
}
public override string ToString()
{
return Name;
}
}