需要访问其分配类的扩展方法的动态变量

时间:2018-07-23 00:18:12

标签: c# dynamic extension-methods

例如,如果我有扩展方法,例如:

public static void StringExtensionTest(this string stringer) { MessageBox.Show("This is just a test for stackoverflow"); }

使用简单的测试代码,例如:

private void button1_Click(object sender, EventArgs e)
{
    string overflow = "Only a test";

    dynamic overflowed = "Only a test";

    overflow.StringExtensionTest();

    overflowed.StringExtensionTest();
}

如何溢出?StringExtensionTest()起作用?在此示例中,我不想使用明显的强制转换为字符串。

稍后,在实际项目中,我将拥有多个不同类型的对象,这些对象将分配给一个动态变量,并调用添加到所有这些类中的通用扩展方法。

2 个答案:

答案 0 :(得分:0)

您正在从动态字符串中获取字符串,但是在运行时使用以下代码将不会转换为字符串类型,这将有所帮助并经过测试。

private void button2_Click(object sender, EventArgs e)
    {
        Test.overflow.StringExtensionTest();
        ((string)Test.overflowed).StringExtensionTest();
    }

public static class Test
{
    public static string overflow = "Only a test";
    public static dynamic overflowed = "Only a test";
    public static void StringExtensionTest(this string stringer) { MessageBox.Show("This is just a test for stackoverflow"); }
}

第一个对话框

enter image description here

第二个对话框

enter image description here

答案 1 :(得分:0)

如果每种可能类型的扩展方法都在同一类中定义,那么您可以将其称为静态方法:

SomeClass.StringExtensionTest(overflow);

但是,否则,扩展方法在dynamic上下文中没有多大意义。扩展方法将方法添加到可能会根据调用所在的C#文件中使用的命名空间来找到的方法集中。在运行的代码中,等效于命名空间或C#文件。