В конкретном примере, который вы указали (почему это используется в исходном коде ASP.NET), ответ таков: да, это имеет значение, существует ли листинг (object)
.
У нас есть этот метод:
public static Route MapRoute(this RouteCollection routes, string name, string url)
{
return MapRoute(routes, name, url, null /* defaults */, (object)null /* constraints */);
}
Давайте предположим, что мы называем это так:
RouteCollection.MapRoute(routes, "SomeName", "SomeUrl");
Поскольку (object)null
бросок в этом методе, следующий метод будет называться:
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints)
{
return MapRoute(routes, name, url, defaults, constraints, null /* namespaces */);
}
Поскольку последний параметр явно object
(мы литье к тому, что).
Без актерского следующий метод будет называться:
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces)
{
return MapRoute(routes, name, url, defaults, null /* constraints */, namespaces);
}
Так в основном, актеры там в качестве помощи, чтобы выбрать более конкретный метод над тем менее конкретны.
Вы можете проверить это самостоятельно с более простым примером:
public static class TestClass
{
public static void TestMethod(object parameter)
{
}
public static void TestMethod(string[] parameter)
{
}
}
И тогда звоните:
TestClass.TestMethod(null); // will call TestMethod(string[] parameter)
TestClass.TestMethod((object)null); // will call TestMethod(object parameter)
Вы заметили разницу при запуске и код? – Eser
Eser Я отредактировал вопрос, чтобы добавить более подробную информацию. – RAM
Я не знаю, почему кто-то проголосовал за этот вопрос. Я не знаю разницы, если нет никакой разницы, почему MVC-инфраструктура отличает null от объекта? – RAM