2016-11-24 37 views
-2

也许这是一个愚蠢的问题,但我为应用程序创建一个长同步过程,我不想忘记一些东西。对于每个表,我必须遵循相同的程序,但不同的参数。C#Baseclass foces在依赖类中创建一个函数,但不同的参数

这是一个漫长而无聊的工作。由于这个原因,我应该在基类中有一个约束,它迫使我用不同的参数实现一些函数。

例如

bool DeleteRecordFromTable(SyncResultTable1 sync, bool ExecuteScript = true) 
bool InsertRecordFromTable(SyncResultTable1 sync) 
bool UpdateRecordFromTable(SyncResultTable1 sync, string text) 
bool DeleteRecordFromTable(SyncResultTable2 sync, int value1) 
... 
bool DeleteRecordFromTable(SyncResultTable(n) sync, bool IsDelete, int value1) 
bool InsertRecordFromTable(SyncResultTable(n) sync, DateTime dtExecute) 
bool UpdateRecordFromTable(SyncResultTable(n) sync, [...]) 
+0

我认为这可能只与CLR注射(但我可以错了) –

回答

0

好吧,我找出了我的解决方案。我不知道这是否是世界上最好的解决方案,但我喜欢它并接受建议。

首先我定义我的基类与所有常用功能和INotifyPropertyChanged

Base类的有T的实施和INotifyPropertyChanged的

public abstract class BaseSyncClass<T> : INotifyPropertyChanged where T : SyncResultBase { 
    private readonly ISyncData _syncData; 

    public BaseSyncClass(ISyncData syncData) { 
     _syncData = syncData; 
    } 

    public abstract string UpdateRecordFromTable(T sync); 
    public abstract string UpdateRecordFromTableNoSyncId(List<T> sync); 

    public void UpdateFromServer(List<T> result) { 
     foreach (T sync in result) { 
      UpdateRecordFromTable(sync); 
     } 
    } 
} 

然后当我在创建一个新的阶级基础以上,我可以有所有的实施方法

实施例

public class ListingConditionTableSync : BaseSyncClass<SyncResultCondition> { 
    public ListingConditionTableSync(ISyncData syncData) : base(syncData) { 
    } 

    public override string UpdateRecordFromTable(SyncResultCondition sync) { 
     throw new NotImplementedException(); 
    } 

    public override string UpdateRecordFromTableNoSyncId(List<SyncResultCondition> sync) { 
     throw new NotImplementedException(); 
    } 
} 

您怎么看?这是一个优雅而有用的解决方案吗?

1

你可以尝试做这种方式:

定义你的SyncResult的接口实现

interface ISyncResultTable 
{ 
} 

public class SyncResultTable1 : ISyncResultTable 
{ 
} 

public class SyncResultTable2 : ISyncResultTable 
{ 
} 

等。

interface ITable<T> where T:ISyncResultTable 
{ 
    bool DeleteRecordFromTable(T sync, bool ExecuteScript) 
    bool InsertRecordFromTable(T sync, bool ExecuteScript) 
    bool UpdateRecordFromTable(T sync, bool ExecuteScript) 
} 

比您可以这样写你的课程:

public class Table1 : ITable<SyncResultTable1> 
+0

谢谢!每个功能作为不同的参数。我认为这是我以前的例子。嗯......但最后我可以使用类似于你的建议的东西......我把所有的细节放在T中,而不是有很多参数...... – Enrico

+0

我在数据项目中使用相同的东西......为什么我有没有想过?我不知道... – Enrico

相关问题