需要有关泛型,接口和基类的帮助

kei*_*kei 1 c# generics ado.net interface

假设我有这两个对象:

public class Object1
{
  string prop1;
  string prop2;
}

public class Object2
{
  string prop1;
  int prop2;
  int prop3;
}
Run Code Online (Sandbox Code Playgroud)

以及以下类别和方法:

public class Object1Service
{
  public Object1 GetObject(Object1 o) { return o; }
  public void SaveProperty2(Object1 o, string s) { o.prop2 = s; }
}

public class Object2Service
{
  public Object2 GetObject(Object2 o) { return o; }
  public void SaveProperty2(Object2 o, int i) { o.prop2 = i; }
}
Run Code Online (Sandbox Code Playgroud)

如何将其转换为通用?
我最好需要一些东西,以便服务实现一个接口,并在可能的情况下调用一些通用的基类.
如果这两个对象共享一个共同的父类会有帮助吗?如果是这样,他们将如何构建?


附录:

回归是我真正的问题.

public T GetObjectByKey<T>(string key)
{
    using (DBEntities db = new DBEntities())
    {
        try
        {
            T returnedEntity = default(T);

            switch (EntityDictionary[typeof (T)])
            // I have a dictionary setup like this dictionary<type, string>
            {
                case "Object1" :
                    returnedEntity = ( from r in db.ObjectONESets
                                        where r.prop1 == key
                                        select new T
                                        {
                                            prop1 = r.prop1,
                                            prop2 = r.prop2
                                        }).FirstOrDefault();
                    break ;
                case "Object2" :
                    returnedEntity = ( from r in db.ObjectTWOSets
                                        where r.prop1 == key
                                        select new T
                                        {
                                            prop1 = r.prop1,
                                            prop2 = r.prop2,
                                            prop3 = r.prop3
                                        }).FirstOrDefault();
                    break ;
            }
            return returnedEntity;
        }
        catch (NullReferenceException )
        {
            return default(T);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果不将所有对象属性放在基础对象中,它就无法知道prop1-3是T的属性.
如果我确实将所有属性(常见或不属性)放在基础对象中,并且如果我需要Object1,那么然后有一个我不需要的prop3.
我不确定我是否在这一点上有很多意义,或者我所要求的是甚至可以使用泛型.

Jus*_*ony 5

我相信你不会在这里获得仿制药的好处.原因是因为prop2这些类中的每一类都是不同的类型.如果它们是相同的,那么您可以将公共属性放入基类中并执行类似的操作

public class BaseObject
{
    string prop1;
    string prop2
}

public class Object1 : BaseObject
{

}

public class Object2 : BaseObject
{
    int prop3;
}

public class ObjectService<T> where T is BaseObject
{
    public T GetObject(T o) { return o; }
    public void SaveProperty2(T o, string i) { o.prop2 = i; }
}
Run Code Online (Sandbox Code Playgroud)

您至少可以使用当前示例使GetObject成为通用的...但是整个方法看起来毫无意义:

public class ObjectService
{
  public T GetObject<T>(T o) { return o; }
  public void SaveObject2Property2(Object2 o, int i) { o.prop2 = i; }
  public void SaveObject1Property2(Object1 o, string s) { o.prop2 = s; }
}
Run Code Online (Sandbox Code Playgroud)