首页 > 代码库 > C# 通过Action委托提高代码的重用

C# 通过Action委托提高代码的重用

如何通过Action重复的代码

  其实提高代码的重用,有几个途径

    a.继承

    b.工具方法

    c.使用委托

    a,b两点都很容易理解,说一下"c"这一点,举个DataContext事务的例子       

using(var context = new DataContext()){     context .BeginTransaction();     try    {      context.User.GetUser();      context.User.add(new User{name="xian"}); 
context.User.add(new User{name="hong"}); context.Commit(); } catch { context.Rollback(); } }

以上代码很常见吧,是不是每个使用事务地方都需要这么写,其实这个时候我们可以利用委托来实现

  public class DbInvoker        {            public void Transaction(Action<DataContext> aciton)            {                using (var context = new DataContext())                {                    context.BeginTransaction();                    try                    {                        aciton(context);                        context.Commit();                    }                    catch                    {                        context.Rollback();                    }                }            }        }

以后用到事务的地方这样调用就行了

DbInvoker.Transaction(context=>{      context.User.Add(new User{name="xian"});      context.User.Add(new User{name="hong"});});

是不是方便了许多.

上述主要是保持一个原则:提出变化,封装固定操作!

其中:BeginTransaction、Commit、Rollback 为固定操作;
而context.User.GetUser();context.User.add(new User{name="xian"}); 
context.User.add(new User{name="hong"});
为固定操作。
aciton(context); 可以这样理解相当于一个无返回值,参数为Context方法。

Public void ExecutAction(Context content)
{

}