C#中的简单多态

时间:2017-01-09 11:23:22

标签: c# methods polymorphism

这个程序是关于C#中的多态性。但是呼叫方法在visual studio中不起作用。该程序给出错误,如“当前上下文中不存在名称'调用'。”

mfib (x-2)

5 个答案:

答案 0 :(得分:3)

你必须告诉来自哪个类的静态方法 - 即process.Call(dog);。这应该使它工作

答案 1 :(得分:2)

class process
{
    public static void Call(dog d) //2
    {
        Console.WriteLine("dog is called");
    }
    public static void Call(cat c) //3
    {
        Console.WriteLine("cat is called");
    }
}
class polymorphism
{
    public static void Main()
    {
        dog dog = new dog();
        cat cat = new cat();
        process.Call(dog); //1
    }
}

我做了哪些改变?

  1. 流程有Call,而不是polymorphism。因此,请参阅Call

  2. 致电process
  3. 和3.如果您尚未定义访问级别,则无法访问类外的方法。因此,我添加了public,因为我们需要访问Call类之外的process

  4. 希望它有所帮助。

答案 2 :(得分:0)

您的计划存在一些问题:

  1. 您不使用函数,而是使用方法。这意味着当您不在process范围内时,如果不指定类,则无法调用Call
  2. Call方法没有明确的可见性,这意味着它们默认为private,因此无法在process之外调用。
  3. 您的程序中没有任何多态(甚至不是catdog)。你正在做的是验证重载是否有效。重载不是面向对象的概念。它的语法糖。最重要的是,您的方法是static。静态方法没有多态性。
  4. 您发出的1和2的解决方式如下:

    class process
    {
        public static void Call(dog d)
        {
            Console.WriteLine("dog is called");
        }
        public static void Call(cat c)
        {
            Console.WriteLine("cat is called");
        }
    }
    class polymorphism
    {
        public static void Main()
        {
            dog dog = new dog();
            cat cat = new cat();
            process.Call(dog);
        }
     }
    

答案 3 :(得分:0)

 class WebsiteCalendarController(http.Controller):
       @http.route(['/calendar'],  type='http', auth="public",          website=True)  

def calendar(self ,page=1, **searches):                  
 #return request.redirect("website_calendar.index",values)   
return request.render('website_calendar.index', {'values': [""]})

答案 4 :(得分:-2)

    //polymorphism
    class dog
    {
        
    }
    class cat
    {
    }
    class process
    {
        static void Call(dog d)
        {
            Console.WriteLine("dog is called");
        }
        static void Call(cat c)
        {
            Console.WriteLine("cat is called");
        }
    
        public static void Main()
        {
            dog dog = new dog();
            cat cat = new cat();
            Call(dog);
            Console.ReadLine();

        }
    }