[英]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.