Могут ли параметры метода быть динамическими в С#
В С# 4.0 возможны параметры динамического метода, например, в следующем коде?
public string MakeItQuack(dynamic duck)
{
string quack = duck.Quack();
return quack;
}
У меня есть много классных примеров динамического ключевого слова в С# 4.0, но не как выше. Этот вопрос, конечно, вдохновлен тем, как работает python.
Ответы
Ответ 1
Да, вы можете это сделать абсолютно. Для целей статического разрешения перегрузки он рассматривается как параметр object
(и называется статическим). То, что вы делаете в этом методе, будет динамическим. Например:
using System;
class Program
{
static void Foo(dynamic duck)
{
duck.Quack(); // Called dynamically
}
static void Foo(Guid ignored)
{
}
static void Main()
{
// Calls Foo(dynamic) statically
Foo("hello");
}
}
Природа "dynamic is like object" означает, что вы не можете иметь одну перегрузку только с параметром object
и с одним параметром dynamic
.
Ответ 2
См. документацию http://msdn.microsoft.com/en-us/library/dd264741(VS.100).aspx
Ответ 3
Да, вы можете это сделать. Как указано в спецификации С# 4.0, грамматика расширяется для поддержки dynamic
везде, где ожидается тип:
Тип:
...
dynamic
Это включает определения параметров, конечно.
Ответ 4
Да; см., например,
http://blogs.msdn.com/cburrows/archive/2008/11/14/c-dynamic-part-vi.aspx
или другие блоги Криса. Или возьмите VS2010 Beta2 и попробуйте.