例如,如果我有扩展方法,例如:
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()起作用?在此示例中,我不想使用明显的强制转换为字符串。
稍后,在实际项目中,我将拥有多个不同类型的对象,这些对象将分配给一个动态变量,并调用添加到所有这些类中的通用扩展方法。
答案 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"); }
}
第一个对话框
第二个对话框
答案 1 :(得分:0)
如果每种可能类型的扩展方法都在同一类中定义,那么您可以将其称为静态方法:
SomeClass.StringExtensionTest(overflow);
但是,否则,扩展方法在dynamic
上下文中没有多大意义。扩展方法将方法添加到可能会根据调用所在的C#文件中使用的命名空间来找到的方法集中。在运行的代码中,等效于命名空间或C#文件。