5
Zdarza mi się zobaczyć kod podobny do tego.dynamiczne rzutowanie w parametrze C#
function((dynamic) param1, param2);
Kiedy i dlaczego potrzebujemy tego rodzaju dynamicznego odlewania pod parametry?
Zdarza mi się zobaczyć kod podobny do tego.dynamiczne rzutowanie w parametrze C#
function((dynamic) param1, param2);
Kiedy i dlaczego potrzebujemy tego rodzaju dynamicznego odlewania pod parametry?
Może być używany do dynamicznego wyboru przeciążenie function(...)
oparciu o typ param1
w czasie wykonywania, na przykład:
public static void Something(string x)
{
Console.WriteLine("Hello");
}
public static void Something(int x)
{
Console.WriteLine("Goodbye");
}
public static void Main()
{
object x = "A String";
// This will choose string overload of Something() and output "Hello"
Something((dynamic)x);
x = 13;
// This will choose int overload of Something() and output "Goodbye"
Something((dynamic)x);
}
Więc chociaż x
jest nawiązaniem do object
, będzie decydować w czasie wykonywania co przeciążenie Something()
, aby zadzwonić. Zauważ, że jeśli nie ma odpowiedniego przeciążenia, zostanie zgłoszony wyjątek:
// ...
x = 3.14;
// No overload of Something(double) exists, so this throws at runtime.
Something((dynamic)x);
Chciałbym zobaczyć więcej. Zasadniczo, jeśli funkcja przyjmuje zmienną dynamiczną, możesz * rzucić *, ale nie jest to konieczne. – scottm
@scottm: Tak myślałem na początku, a potem przypomniałem sobie, że możesz również użyć go do wybrania właściwego przeciążenia metody w czasie wykonywania. –
@ James MichaelHare Bardzo mały przypadek użycia. To jest coś, co chciałbym zbesztać poprzedniego programistę za celowe używanie. – scottm