没有强制转换的C#隐式转换

时间:2016-06-16 20:44:14

标签: c#

我正在将VB.net代码转换为C#,我遇到了一个问题。使用VB.net,我有使用OBJECT参数的函数。这些参数通常有2种不同的类型,它们具有我需要的相同方法。例如:

Public Sub test(param1 as Object)
    param1.show()
End Sub

使用C#,我会执行相同类型的功能,但编译器不会接受它。

public void test(object param1)
{
    param1.show(); // Error on .show (not found)
}

我应该以某种方式转换参数,但我需要向函数发送不同的类型。有可能吗?

3 个答案:

答案 0 :(得分:8)

这就是存在接口的原因。

public interface IShowable {
    void show();
}

class YourClassFromAbove {
    public void test(IShowable param1)
    {
        param1.show();
    }
}

传入的任何类型都必须实现解决问题的IShowable合同。

答案 1 :(得分:3)

如果您使用Option Strict Off设置Object,则相当于在C#中使用dynamic

public void test(dynamic param1)
{
    param1.show();
}

然而,我真的,真的,建议你不要这样做。发明dynamic是为了帮助编写后期绑定代码(也就是在引入此功能时VB6中提供的作业Object),你真的应该使用带有接口的类来获取强类型信息为了你的代码。

答案 2 :(得分:0)

或者您可以为每种类型单独设置功能:

chunk 1, chunk 2, chunk 3, chunk 4