C# 基类不能修改的类的基类方法?

C# 基类不能修改的类的基类方法?,c#,.net,entity-framework,C#,.net,Entity Framework,我正在使用实体框架生成一个“类”实体,如下所示: public partial class CClass: EntityObject { #region Factory Method #region Primitive Properties } 我剩下的部分类实现是 public partial class CClass : IDemoralize { public Value xValue { get; set; } public void IDemora

我正在使用实体框架生成一个“类”实体,如下所示:

public partial class CClass: EntityObject
{
    #region Factory Method

    #region Primitive Properties
}
我剩下的部分类实现是

public partial class CClass : IDemoralize
{
    public Value xValue { get; set; }

    public void IDemoralize.Demoralize()
    {
        // implementation

    }
    public void IDemoralize.Demoralize(Func<IDemoralize, bool> CustomDemoralization)
    {
        bool success = CustomDemoralization(this);

        if (!success)
            throw new ApplicationException();
    }

    public void IDemoralize.WriteModel()
    {
        // implementation
    }

    public void IDemoralize.WriteModel(Func<IDemoralize, bool> Write)
    {
        bool success = Write(this);
        if (!success)
            throw new ApplicationException();
    }
}
公共部分类C类:IDemoralize
{
公共值xValue{get;set;}
使道德败坏
{
//实施
}
公共道德缺失。道德败坏(Func客户道德败坏)
{
bool success=客户士气低落(这一点);
如果(!成功)
抛出新的ApplicationException();
}
public void IDemoralize.WriteModel()
{
//实施
}
public void IDemoralize.WriteModel(Func Write)
{
bool success=写(这个);
如果(!成功)
抛出新的ApplicationException();
}
}
现在,由于下面列出的两个方法在整个设计中都有共同的实现,我想将它们转移到一个名为DemoralizeBase的基类中,因此如果代码需要更改,那么一致性就变得易于管理

// in DemoralizeBase 
public void Demoralize(Func<IDemoralize, bool> CustomDemoralization)
{
    //implementation
}

public void WriteModel(Func<IDemoralize, bool> Write)
{
    // implementation
}
//士气低落
公共无效道德败坏(Func客户道德败坏)
{
//实施
}
public void WriteModel(Func Write)
{
//实施
}

有没有办法做到这一点,或者我应该使用现有的设计?

您可以将其作为扩展方法编写:

public static class Demoralize {
    public static void Demoralize(this IDemoralize obj,
         Func<IDemoralize, bool> CustomDemoralization) {...}
    public static void WriteModel(this IDemoralize obj,
         Func<IDemoralize, bool> Write) {...}
}
需要注意的一点是:在当前实例上调用扩展方法时,
this.
(通常是可选的)是必需的,即

Demoralize(...); // does not work
this.Demoralize(...); // works

您可以将其编写为扩展方法:

public static class Demoralize {
    public static void Demoralize(this IDemoralize obj,
         Func<IDemoralize, bool> CustomDemoralization) {...}
    public static void WriteModel(this IDemoralize obj,
         Func<IDemoralize, bool> Write) {...}
}
需要注意的一点是:在当前实例上调用扩展方法时,
this.
(通常是可选的)是必需的,即

Demoralize(...); // does not work
this.Demoralize(...); // works

我想在这里进行一些依赖注入。 IDemoralize定义了4种方法,其中2种方法在整个框架中具有通用实现。 我要做的是:从IDemoralize中提取一个新接口,并向实现该接口的对象添加一个依赖项到CClass中

public interface IDemoralizeBase
{
    void Demoralize(Func<IDemoralize, bool> CustomDemoralization);
    void WriteModel(Func<IDemoralize, bool> Write);
}
公共接口IDemoralizeBase
{
无效士气低落(Func客户士气低落);
无效WriteModel(函数写入);
}
将对象IDemoralizeBase添加到CClass,并定义一个构造函数,该构造函数允许您注入依赖项

public class CClass : IDemoralize
{
    public IDemoralizeBase MyDemoralizer {get; private set;}

    public CClass(IDemoralizeBase basicDemoralizer)
    {
        MyDemoralizer = basicDemoralizer;
    }

    public void Demoralize(Func<IDemoralize, bool> CustomDemoralization)
    {
        MyDemoralizer.Demoralize(CustomDemoralization);
    }

    public void WriteModel(Func<IDemoralize, bool> Write)
    {
        MyDemoralizer.WriteModel(Write);
    }
}
公共类类:IDemoralize
{
公共思想道德基础道德败坏者{get;private set;}
公共类(IDemoralizeBase basicDemoralizer)
{
MyDemoralizer=基本Demoralizer;
}
公共无效道德败坏(Func客户道德败坏)
{
士气低落(习惯上的士气低落);
}
public void WriteModel(Func Write)
{
写模式(Write);
}
}
这将允许您创建一个或n个实现IDemoralizeBase的类,以便在某些特殊情况下获得某些特殊实现时,可以注入一个特殊依赖项

干杯


拉斐尔

我想在这里进行一些依赖注入。 IDemoralize定义了4种方法,其中2种方法在整个框架中具有通用实现。 我要做的是:从IDemoralize中提取一个新接口,并向实现该接口的对象添加一个依赖项到CClass中

public interface IDemoralizeBase
{
    void Demoralize(Func<IDemoralize, bool> CustomDemoralization);
    void WriteModel(Func<IDemoralize, bool> Write);
}
公共接口IDemoralizeBase
{
无效士气低落(Func客户士气低落);
无效WriteModel(函数写入);
}
将对象IDemoralizeBase添加到CClass,并定义一个构造函数,该构造函数允许您注入依赖项

public class CClass : IDemoralize
{
    public IDemoralizeBase MyDemoralizer {get; private set;}

    public CClass(IDemoralizeBase basicDemoralizer)
    {
        MyDemoralizer = basicDemoralizer;
    }

    public void Demoralize(Func<IDemoralize, bool> CustomDemoralization)
    {
        MyDemoralizer.Demoralize(CustomDemoralization);
    }

    public void WriteModel(Func<IDemoralize, bool> Write)
    {
        MyDemoralizer.WriteModel(Write);
    }
}
公共类类:IDemoralize
{
公共思想道德基础道德败坏者{get;private set;}
公共类(IDemoralizeBase basicDemoralizer)
{
MyDemoralizer=基本Demoralizer;
}
公共无效道德败坏(Func客户道德败坏)
{
士气低落(习惯上的士气低落);
}
public void WriteModel(Func Write)
{
写模式(Write);
}
}
这将允许您创建一个或n个实现IDemoralizeBase的类,以便在某些特殊情况下获得某些特殊实现时,可以注入一个特殊依赖项

干杯


Raphael

您可以使用两级继承解决此问题。Demoralizebase可以从EntityObject继承。然后类从DemoralizeBase继承。您可以使用2级继承来解决它DemoralizeBase可以从EntityObject继承。CClass然后从DemoralizeBase继承。或者,您也可以直接调用该方法并传递实例:“Demoralize.Demoralize(YourclassInstance,…);”-尽管我更喜欢答案中描述的语法。还请注意,传递给扩展方法的实例可以为null。或者,您也可以直接调用该方法并传递实例:“Demoralize.Demoralize(yourCClassInstance,…);”-尽管我更喜欢答案中描述的语法。还要注意,传递给扩展方法的实例可以为null。