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。