簡體   English   中英

C#中的簡單多態

[英]Simple polymorphism in C#

這個程序是關於 C# 中的多態性的。 但是調用方法在 Visual Studio 中不起作用。 程序給出錯誤,如“當前上下文中不存在名稱'Call'”。

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");
    }
}
class polymorphism
{
    public static void Main()
    {
        dog dog = new dog();
        cat cat = new cat();
        Call(dog);
    }

}

您必須知道來自哪個類的靜態方法 - 即process.Call(dog); . 那應該讓它工作

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 因此,通過引用process調用Call

  2. 和 3. 如果您沒有定義訪問級別,您將無法訪問類外的方法。 因此,我添加了public因為我們需要在process類之外訪問Call

希望它有所幫助。

您的程序存在一些問題:

  1. 您不是在使用函數,而是在使用方法。 這意味着當你不在process ,你不能在不指定類的情況下調用Call
  2. Call方法沒有明確的可見性,這意味着它們默認是private的,因此不能在process外部調用。
  3. 您的程序中沒有任何多態性(甚至catdog也不行)。 您正在做的是驗證重載是否有效。 重載不是面向對象的概念。 這是語法糖。 最重要的是,您的方法是static 靜態方法沒有多態性。

您發出的 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);
    }
 }
using System;

namespace ConsoleApp
{
    class Program
    {
        static void Main()
        {
            var dog = new Dog();
            var cat = new Cat();
            var whale = new Whale();

            var c = new Caller();

            c.CallFeature(dog);
            c.CallFeature(cat);
            c.CallFeature(whale);

            Console.ReadKey();
        }
    }

    class Cat : Animal
    {
        public override string Feature()
        {
            return "sharp claws";
        }
    }

    class Dog : Animal
    {
        public override string Feature()
        {
            return "big teeth";
        }
    }

    class Whale : Animal
    {

    }

    class Animal
    {
        public virtual string Feature()
        {
            return "unknown features";
        }
    }

    class Caller
    {
        public void CallFeature(Animal a)
        {
            Console.WriteLine("a {0} has {1}", a.GetType().Name, a.Feature());
        }
    }
}

 //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(); } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM