如何将两个相似的函数变成一个函数
本文关键字:函数 一个 两个 相似 | 更新日期: 2023-09-27 18:35:19
我有两个函数,在两个不同的类上做基本相同的事情......每个类都有不同的属性。
例如:
public class ClassA
{
public int ColorID {get;set;}
public string ColorDescription {get;set;}
}
public class ClassB
{
public int TypeID {get;set;}
public string TypeDescription {get;set;}
}
public void ExFunctionSaveA(ClassA aClass)
{
aClass.ColorID=1;
aClass.ColorDescription="My Color";
Save();
}
public void ExFunctionSaveB(ClassB bClass)
{
bClass.TypeID=2;
bClass.TypeDescription="My Type";
Save();
}
如您所见,类和函数具有相同的类型结构,只是属性名称不同...但我觉得我在重复代码这样做
有没有办法将 ExFunctionA 和 ExFunctionB 合并为一个函数,以便我可以将其用于具有相似结构的所有类
我知道我可以做一些通用的事情,比如
public void ExFunctionSave<T>() // T is either ClassA or ClassB
{
.
.
.
.
Save();
}
但是我将如何处理每个属性
与其使用泛型,为什么不使用继承来解决这个问题呢?
public class theBase
{
string ID;
string Description;
}
public class theColor : theBase
{
}
public class theType : theBase
{
}
public void ExFunctionSaveA(theBase base)
{
base.ID=1;
base.Description="My Color";
Save();
}
如果可以更改类的定义,则最好的方法是使它们实现包含要访问的属性的通用接口:
public interface IDescribable
{
int ID { get; set; }
string Description { get; set; }
}
public class ClassA
{
public int ID { get; set; }
public string Description { get; set; }
public int ColorID
{
get { return ID; }
set { ID = value; }
}
public string ColorDescription
{
get { return Description; }
set { Description = value; }
}
}
public class ClassB
{
public int ID { get; set; }
public string Description { get; set; }
public int TypeID
{
get { return ID; }
set { ID = value; }
}
public string TypeDescription
{
get { return Description; }
set { Description = value; }
}
}
public void ExFunctionSave(IDescribable d, int id, string desc)
{
d.ID = id;
d.Description = desc;
Save();
}
除非 2 个类实现具有该功能的相同接口,否则您无能为力。在您的情况下,甚至函数签名也不同。
您可以定义具有属性 id 和描述的接口。具有此结构的分支可以实现该接口。并且您的方法接收接口作为参数并执行moethods...
看看 Reflection。
反射会让你的代码收到一个ClassA
,并发现它有一个ColourID
和一个ColorDescription
。同样,当您收到 ClassB
,您可以发现它的TypeID
和TypeDescription
。很酷。
我可能会推荐一个通用接口,至少对于您的示例,但是如果您正在尝试更复杂和更通用的东西,那么 Reflection 是要走的路。