Can method parameters be dynamic in C#

后端 未结 4 1644
南旧
南旧 2020-12-30 19:39

In c# 4.0, are dynamic method parameters possible, like in the following code?

public string MakeItQuack(dynamic duck)
{
  string quack = duck.Quack();
  ret         


        
4条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-30 20:25

    Yes, you can absolutely do that. For the purposes of static overload resolution, it's treated as an object parameter (and called statically). What you do within the method will then be dynamic. For example:

    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");
        }
    }
    

    The "dynamic is like object" nature means you can't have one overload with just an object parameter and one with just a dynamic parameter.

提交回复
热议问题