0

我有两个函数在两个不同的类上做基本相同的事情......每个类都有不同的属性。

例如:

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();
}

但是我将如何处理每个属性

4

5 回答 5

5

与其使用泛型,不如使用继承来解决这个问题?

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();
}
于 2012-05-25T21:12:50.040 回答
2

如果您可以更改类的定义,那么最好的方法是让它们实现一个包含您要访问的属性的通用接口:

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();
}
于 2012-05-25T21:12:45.537 回答
0

除非这两个类实现具有该功能的相同接口,否则您无能为力。在您的情况下,即使函数签名也不同。

于 2012-05-25T21:10:32.763 回答
0

您可以定义具有属性 id 和描述的接口。具有这种结构的类可以实现该接口。并且您的方法接收接口作为参数并执行方法...

于 2012-05-25T21:12:18.173 回答
0

看看反射

反射会让你的代码接收到 a ClassA,并发现它有 aColourID和 a ColorDescription。同样,当您收到 a 时ClassB,您可以发现它的TypeIDand TypeDescription。这个很酷。

我可能会推荐一个通用接口,至少对于您的示例,但如果您尝试更复杂和更通用的东西,反射是要走的路。

于 2012-05-25T21:20:49.680 回答