簡體   English   中英

使用另一個類實例訪問類方法?

[英]Access a class method using another class instance?

我需要動態調用一個類並使用該類的方法。

public class A
{
  public void test()
  {
  }
}

public Class B
{
  public void test()
  {
  }
}
class object intermediate
{
//here will decide which class to be invoked
//return the invoked class instance
}

class clientclass
{
intermedidate client=new intermediate();
}

所以我可以在實例客戶端中訪問被調用類的方法。 我正在使用Framework 3.5。 如果子類繼承自中間類,是否可以實現此目的? 我不想在這里反思。

你可以這樣做(未經核實)

interface I
{
}
class A :I
{
}

Class B:I
{
}
class intermediate
{
    public I GetInstance(int i)
    {
        if(i==1)
           return new A();
        else
            return new B(); 
    }

}
class clientclass
{
      I client=new intermediate().GetInstance(1);
}

試試這個

public interface IClassA
{
    void Method();
}

public class ClassA : IClassA
{
    public void Method()
    {

    }
}

public static class ObjectInjector
{
    public static T GetObject<T>()
    {
        object objReturn = null;
        if(typeof(T) == typeof(IClassA))
        {
            objReturn = new ClassA();
        }
        return (T)objReturn;
    }        
}

public class ClientClass
{
    static void Main(string[] args)
    {
          IClassA objA = ObjectInjector.GetObject<IClassA>();
          objA.Method();
    }
}

您可以嘗試按上面的Şhȇkhaṝ進行接口實現。

如果在調用A類或B類測試方法之前需要初始處理,也可以使用抽象類。

以下是一個控制台應用程序示例:

public abstract class MainClass
{
    public virtual void test()
    {
        Console.WriteLine("This is the abstract class");
    }
}

public class A : MainClass
{
    public override void test()
    {
        base.test();
        Console.WriteLine("Class A");
    }
}

public class B : MainClass
{
    public override void test()
    {
        base.test();
        Console.WriteLine("Class B");
    }
}

public class Intermediate
{
    public MainClass CreateInstance(string name)
    {
        if (name.ToUpper() == "A")
        {
            return new A();
        }
        else
        {
            return new B();
        };
    }
}

class Program
{
    static void Main(string[] args)
    {
        Intermediate intermediate = new Intermediate();
        var client = intermediate.CreateInstance("B");

        client.test();
        Console.ReadLine();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM