解决 逆行不作为教程工作

Dalski.

活跃的成员
加入
2020年6月3日
消息
40
编程经验
Beginner
我似乎无法获得Zebra类来执行它的方法。

虽然代表被作为斑马代表被传递,但它正在迈尔马尔马德米德作为基类哺乳动物被接收。

除了我重命名委托标识符的事实之外,我看不出我没有完全复制的内容;这是无关紧要的。
7:30,彼得在派生斑马类中执行display()方法。

C#:
using System;
using System.Collections;
using System.Collections.Generic;

//  Generic delegate:
delegate void DalsContravariantDelegate<in T>(T a);

class Program
{
    public static void Main()
    {
        Zebra z = new Zebra();
        Mammal m = new Mammal();

        Console.WriteLine("\nContravariance with a delegate:");
        //  Declare generic delegate "mammal_method" of DalsContravariantDelegate type which is generically declared as mammal type.
        DalsContravariantDelegate<Mammal> mammal_method = MyMammalMethod;
        //  Declare generic delegate zebra_method & ultimately bind it to the MyMammalMethod.
        DalsContravariantDelegate<Zebra> zebra_method = mammal_method;
        zebra_method(z);
    }

    //  Signature matches the obj call:
    static void MyMammalMethod(Mammal mammal)
    {
        mammal.Display();
    }
}


class Mammal
{
    virtual public void Display()
    {
        Console.WriteLine("Mammal: " + GetHashCode());
    }
}

class Zebra : Mammal
{
    public void Display()
    {
        Console.WriteLine("Zebra: " + GetHashCode());
    }
}
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,160
地点
挪威
编程经验
10+
VS给出此警告:
警告CS0114'Zebra.Display()'隐藏继承成员'Mammal.Display()'。要使当前成员覆盖该实现,请添加override关键字。否则添加新关键字。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
作为明确的代码写作的粉丝,如果您花了时间添加关键字以及访问修饰符,我宁愿。我也喜欢 公共虚拟空白 超过 虚拟公共空白 for readability.

重新警告......您可以覆盖或呼叫新,但为那些读取它的人提供有关此信息会有所帮助。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
这就是为什么我告诉人们不遵循YouTube教程。它们主要是所有的污垢,窃听,严重解释或书面,几乎总是永远不会工作。

给我一个图书馆和一本书。
 

Dalski.

活跃的成员
加入
2020年6月3日
消息
40
编程经验
Beginner
谢谢你俩。我真的很惊讶,因为它思考的那种稀释点是必要的。
感谢您对语义毛细的反馈。这可能是我在协方差上观看的第10辅导&逆行。我只是在学习就是全部。这个主题上没有很多好的书面教程。是的,你会发现许多我已经完成的笔记本教程,但是当你是一个初学者时,很难让你的脑袋。这个视频,他不应该在λ表达上逐渐弥补。他应该关注这个话题。但这是这个主题的最佳教程。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,732
地点
悉尼,澳大利亚
编程经验
10+
我真的很惊讶,因为它思考的那种稀释点是必要的。
一点也不。如果要覆盖方法,那么您必须覆盖它。这很简单。否则,它们不是相同的方法,但不同的方法具有相同的名称。这与逆转无关。逆行是接受具有具有预期类型的​​基本类型的参数的委托。代码编译和运行的事实证明,这是在那里逆时间发生的。您的问题是多态性,或者至少是您没有正确实施它。您通过Zebra对象然后通过哺乳动物参考使用它,然后调用显示方法。为什么你认为Zebra.Display方法将在哺乳动物参考上调用,而不覆盖那么特别是什么推翻?
 

Dalski.

活跃的成员
加入
2020年6月3日
消息
40
编程经验
Beginner
谢谢JM,你在那里帮助了我很多。我追随Tutorialsteacher.com作为我所有研究的基础,但与LeadyCppp.com的喜欢相比,它很短暂,所以我必须在TutorialSteacher.com划伤表面的大多数主题上进一步阅读。

关于令人困惑的嵌套/多态性的教程的糟糕设置。我只是遵循YouTube教程,&它让我非常困惑。关于筑巢课程的思考(我知道我们不能像C ++那样无限期地筑巢),但一个人不禁怀疑&什么是最终的决定点。我不会因为我可以保证我不会清楚地解释我的想法。

在第一个YouTube教程中,奇怪的方法被称为奇怪的方法,但感谢您在上面的输入,我现在正在调查多态,现在不会在这里麻烦论坛。再次感谢您的意见;非常感激。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
关于令人困惑的嵌套/多态性的教程的糟糕设置。我只是遵循YouTube教程
这就是为什么你不应该在youtube上遵循教程。您将始终遇到某些问题,这些问题根本无法解释或未解释。
我跟随tutorialsteacher.com作为我所有学习的基础,但与Learncpp.com的喜欢相比它很短
你想学习c#吗?然后从这里开始: C#文档 - 开始,教程,参考。 并在该文档平台上阅读每个页面,直到您知道大部分后退。这是我推荐的唯一来源,因为它永远不会摇动我。
 
最佳 底部