0

假设我有一个名为 myPage 的网页,它实现了 Page,但也实现了我自己的名为 myInterface 的接口。我的目标是在 myInterface 中调用一个名为 myFunction 的函数,只使用字符串中的类名。

public interface MyInterfac{
          Myfunction();
    }
public partial class MyPage1: Page, MyInterface{ 
          Myfunction(){ return "AAA"; }
    }
public partial class MyPage2: Page, MyInterface{ 
          Myfunction(){ return "BBB"; }
    }

现在这是我可以获得的信息:

    string pageName1 = "MyPage1";
    string pageName2 = "MyPage2";

如何从这里得到沿线的东西:

   (MyInterface)MyPage1_instance.Myfunction();         //Should return AAA;
   (MyInterface)MyPage2_instance.Myfunction();         //Should return BBB;

编辑:这是当我尝试创建 MyInterface 的实例但它不起作用时:

Type myTypeObj = Type.GetType("MyPage1");
MyInterface MyPage1_instance = (MyInterface) Activator.CreateInstance (myTypeObj);
4

1 回答 1

0

如果您正在寻找不会从您的类型的一个实例更改为下一个实例的信息,您可能应该使用一个属性。这是一个例子:

[System.ComponentModel.Description("aaa")]
class Page1 { }

[System.ComponentModel.Description("bbb")]
class Page2 { }

[TestClass]
public class Tests
{
    private static string GetDescription(string typeName)
    {
        var type = System.Reflection.Assembly.GetExecutingAssembly()
            .GetTypes().Single(t => t.Name == typeName);

        return type.GetCustomAttributes(false)
            .OfType<System.ComponentModel.DescriptionAttribute>()
            .Single().Description;
    }

    [TestMethod]
    public void MyTestMethod()
    {
        Assert.AreEqual("aaa", GetDescription("Page1"));
        Assert.AreEqual("bbb", GetDescription("Page2"));
    }
}

一些笔记

  • 环顾四周,System.ComponentModel看看是否已经有适合您要执行的操作的属性。我在Description这个例子中使用了这个属性。如果找不到合适的,请创建自己的自定义属性。
  • Type.GetType("Qualified.Name.Of.Page1")如果您有可用的信息,使用它可能会更好。
于 2012-05-31T20:19:19.770 回答