[英]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
}
}
我做了哪些改變?
進程有Call
,沒有polymorphism
。 因此,通過引用process
調用Call
。
和 3. 如果您沒有定義訪問級別,您將無法訪問類外的方法。 因此,我添加了public
因為我們需要在process
類之外訪問Call
。
希望它有所幫助。
您的程序存在一些問題:
process
,你不能在不指定類的情況下調用Call
。Call
方法沒有明確的可見性,這意味着它們默認是private
的,因此不能在process
外部調用。cat
和dog
也不行)。 您正在做的是驗證重載是否有效。 重載不是面向對象的概念。 這是語法糖。 最重要的是,您的方法是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.