代码之家  ›  专栏  ›  技术社区  ›  Leonid

如何在特定情况下使用接口创建对象

  •  -1
  • Leonid  · 技术社区  · 14 年前

    我有关于接口和抽象类的问题。 我给你举个简单的例子,可以解释我想做什么。所以,让我们开始吧。

    public interface A
    {
     string param1 { set; get;}
     string param1 { set; get;}
     A CreateObject(string p1,string p2);
    }
    
    public class MyClass1 : A
    {
     public string param1 { set; get; }
     public string param2 { set; get; }
     public A CreateObject(string p1,string p2)
     {
      var obj = new MyClass1();
      obj.param1 = p1;
      obj.param2 = p2;
      return obj;
     }
    
    }
    public class MyClass2 : A
    {
     public string param1 { set; get; }
     public string param2 { set; get; }
     public A CreateObject(string p1,string p2)
     {
      var obj = new MyClass2();
      obj.param1 = p1;
      obj.param2 = p2;
      return obj;
     }
    
    }
    
    
    // I have little problem with this function
    public List<A> GetNodes(int count)
    {
      var lst_Objects = new List<a>();
                    for(int i=0; i<count; i++)
                    {
               string Param1 = GetParam1();
               string Param2 = GetParam2();
                            lst_Objects.Add(new A.CreateObject(Param1,Param2); // but it defenitly doesn't work(wrong way)
                    }
                 return lst_Objects;
    }
    

    提示: MyClass1和MyClass2是实体对象,因此我不能创建抽象类,并使用一些泛型来解决这个问题。

    我将感谢你的意见

    3 回复  |  直到 14 年前
        1
  •  0
  •   abhishek    14 年前

    你没有提到一个.CreateObject是静态的,而其他的具体类MyClass1/MyClass2是静态的。使用

    相反。

        2
  •  0
  •   x0n    14 年前

    接口声明了一个CreateObject方法,这两个类都没有实现。您的类实现了一个静态CreateObject,它不能满足接口的要求。接口不能声明静态成员。

        3
  •  0
  •   Leonid    14 年前

    public class Universal: A
    {
     public string param1 { set; get; }
     public string param2 { set; get; }
     public static A CreateObject(string p1,string p2)
     {
      var obj = new MyClass1();
      obj.param1 = p1;
      obj.param2 = p2;
      return obj;
     }
    

    函数GetNodes的外观如下:

    public List<A> GetNodes(int count)
    {
      var lst_Objects = new List<a>();
                    for(int i=0; i<count; i++)
                    {
                            string Param1 = GetParam1();
                            string Param2 = GetParam2();
                            lst_Objects.Add(Universal.CreateObject(Param1 ,Param2)); 
                    }
                 return lst_Objects;
    }
    

    此函数将返回具有类型A的对象列表(我很容易将其转换为myclass1或myclass2对象)。

    谢谢你的关注。