我想通过在类中添加一个新函数来自定义外部类(自写)的功能,具体取决于函数参数/泛型类型。
例如,与此处http://automapper.readthedocs.io/en/latest/Custom-value-resolvers.html#custom-constructor-methods相同的是创建自定义界面并将其添加到对象中。
所以我想为类型T做一个自己的interace(例如class2) 并将此接口添加到class1,当我从class1调用一个函数时,应使用此接口/函数。
object1(of class1).add(Interface x, typeof(class2))
object1(of class1).DoSomething<class2>() -> calls interface/function x
与此处相同的功能:(但是在创建实例后不添加函数DoSomethingY,而是需要在class1本身中添加 - 我不想这样做)
public class class1 {
private DoSomething1..
private DoSomething2..
private DoSomethingDefault..
public T DoSomething<T>()
{
if(typeof(t) == ...)
return DoSomething1();
else(typeof(T) == ..)
return DoSomething2();
else
return DoSometingDefault();
}
}
所以我的问题。我用什么:交流,代表?我在哪里/如何存储?
修改 更清楚
public interface IDoSomething<T>
{
public T Work(string obj)
}
public DoSomething1 : IDoSomething<class2>
{
public class2 Work()
{
return new class2() {name = "xx"} {
}
}
var obj1 = new class1();
obj1.Register<class2>(DoSomething1) // might be wrong syntax, but my intention
// or obj1.Register(tyopeof(class2),DoSomething1);
class2 obj2 = obj1.DoSomething<class2>();
//obj1/class1 should call DoSomething1.Work();
class3 obj3 = obj1.DoSomething<class3>(); // should call default if not registered
这是一个正常的设计模式吗?调用自定义函数而不是使用默认的类函数?
答案 0 :(得分:1)
如果我理解你的话。你需要这样的东西:
var _do = new Do();
_do.Register<I1>(() => Console.WriteLine("I1 action"));
_do.Register<I2>(() => Console.WriteLine("I2 action"));
_do.Work<I1>();
_do.Work<I2>();
_do.Work<string>();
public class Do {
IDictionary<Type, Action> actions = new Dictionary<Type, Action>();
private void DefaultAction(){
Console.WriteLine("Default action called");
}
public void Register<T>(Action act){
var type = typeof(T);
if(!actions.ContainsKey(type)){
actions.Add(type, act);
}
}
public void Work<T>()
{
var type = typeof(T);
if(actions.ContainsKey(type))
{
actions[type]();
}
else
{
DefaultAction();
}
}
}
public interface I1 { }
public interface I2 { }