当前位置:  开发笔记 > 编程语言 > 正文

你能帮我理解一个实际例子中的抽象类与接口的用法吗?

如何解决《你能帮我理解一个实际例子中的抽象类与接口的用法吗?》经验,为你挑选了2个好方法。

你能否给我一个对抽象类和继承使用几乎过于简单化的理解并帮助我,这样我才能真正理解这个概念以及如何实现?我有一个项目,我正在努力完成,并且失去了如何实施.我一直在和我的教授聊天,并被告知,如果我无法弄明白,我可能还没准备好上课.我已经完成了prequestite课程,但仍然无法理解这些概念.

澄清一下,到目前为止,我所做的项目如下.我还没有填写狗/猫类等.你能指点一下吗?我不是要求任何人给我"答案".我只是迷失在哪里.我参加在线课程,他与我的沟通工作一直令人不安.我刚刚完成了所有其他课程的4.0,所以我愿意付出努力,但我对这些概念的理解以及如何实际应用它们感到迷茫.

是否有任何意见或帮助可以让我在这个项目中取得进一步进展?

我要实现的内容如下:

概述:

本练习的目的是演示Interfaces,Inheritance,Abstract classes和Polymorphism的使用.您的任务是获取提供的程序shell并添加适当的类和相应的类成员/方法,以使此程序正常运行.您不能对提供的任何代码进行更改,您只能添加您编写的类.尽管有许多方法可以使程序正常工作,但您必须使用演示Interfaces,
Inheritance,Abstract classes和Polymorphism的技术.同样,为了清楚起见,您可以添加到提供的代码,但不能更改或删除任何代码.提供的代码将使用非常少的附加代码,并将满足练习的要求.

如果成功完成分配,程序应在运行时输出以下语句:

我的名字是Spot,我是一只狗

我的名字是费利克斯,我是一只猫

要求:

1)您必须有一个名为"Animal"的抽象基类,Dog和Cat类可以从中派生出来.

2)Animal基类必须从接口'IAnimal'派生,它是唯一应该从IAnimal派生的类.

3)由于所有动物都有一个名字,一个名字不是一个特定于狗或猫的属性,动物

基类应该是存储名称的位置以及实现WhatIsMyName get-property的位置.

4)您需要创建一个仅从Animal基类派生的Dog和Cat类.

5)Dog和Cat类应该实现WhatAmI get-property并返回相应的字符串值.

您无法更改的代码:

using System;

namespace IT274_U2
{
    public interface IAnimal
    {
        string WhatAmI { get; }
        string WhatIsMyName { get; }
    }

    public class TesterClass
    {
        public static void DescribeAnimal(IAnimal animal)
        {
            Console.WriteLine("My name is {0}, I am a {1}", animal.WhatIsMyName, animal.WhatAmI);
        }

        static void Main(string[] args)
        {
            Dog mydog = new Dog("Spot");
            Cat mycat = new Cat("Felix");
            DescribeAnimal(mydog);
            DescribeAnimal(mycat);
        }
    }
}

///////////////////////

我编写的代码到目前为止:

using System;


namespace IT274_U2
{
    public interface IAnimal
    {
        string WhatAmI { get; }
        string WhatIsMyName { get; }
    }


    public class Dog
    {
        public abstract string WhatAmI
        {
            get;
            set;
        }
    }//end public class Dog

    public class Cat
    {
    public abstract string WhatIsMyName  
    {
        get;
        set;
    }
    }//end public class Cat

    public abstract class Animal : IAnimal
    {
    // fields
    protected string Dog;
    protected string Cat;

                  // implement WhatIsMyName 

    //properties
    public abstract String Dog
    {
        get;  
        set;
    }
    public abstract String Cat
    {
        get;
        set;
    }
    public abstract string WhatIsMyName();

    } //end public abstract class Animal


    public class TesterClass
    {
        public static void DescribeAnimal(IAnimal animal)
        {
            Console.WriteLine("My name is {0}, I am a {1}", animal.WhatIsMyName, animal.WhatAmI);
        }

        static void Main(string[] args)
        {

            Dog mydog = new Dog("Spot");
            Cat mycat = new Cat("Felix");
            DescribeAnimal(mydog);
            DescribeAnimal(mycat);
        }
    }
}

Grzenio.. 6

接口和抽象类之间的主要区别在于,在接口中,您只定义应该是实现此接口的对象的公共方法和属性.抽象类提供了一些基本实现,但有一些"空白" - 继承者需要实现的抽象方法.

我不打算为你做功课,而是提示:动物类不应该包含任何特定于狗和猫的东西.



1> Grzenio..:

接口和抽象类之间的主要区别在于,在接口中,您只定义应该是实现此接口的对象的公共方法和属性.抽象类提供了一些基本实现,但有一些"空白" - 继承者需要实现的抽象方法.

我不打算为你做功课,而是提示:动物类不应该包含任何特定于狗和猫的东西.



2> Russ Cam..:

编辑:

我已经为每个课程取出了代码体 - 如果你想看到我的答案,看看编辑修订:)

首先我们定义界面

public interface IAnimal
{
    string WhatAmI { get; }
    string WhatIsMyName { get; }
}

任何实现此接口的类都必须实现这些属性.界面就像合同; 实现接口的类同意提供接口的方法,属性事件或索引器的实现.

接下来,我们需要定义您的抽象Animal类

public abstract class Animal : IAnimal
{
    //Removed for Training, See Edit for the code
}

类是抽象的这一事实表明该类仅用于其他类的基类.我们已经实现了接口的两个属性,并且还有一个私有字段来存储动物名称.此外,我们已经使WhatAmI属性访问器成为抽象,以便我们可以在每个派生类中实现我们自己的特定属性访问器逻辑,并且还定义了一个接受字符串参数的构造函数,并将值分配给_name私有字段.

现在,让我们定义我们的CatDog

public class Dog : Animal
{
    //Removed for Training, See Edit for the code
}

public class Cat : Animal
{
    //Removed for Training, See Edit for the code
}

这两个类都继承自Animal,每个类都有一个构造函数,它定义了一个字符串参数,并将该参数作为参数传递给基础构造函数.此外,每个类都实现了它自己的属性访问器WhatAmI,分别返回其类型的字符串.

对于其余的代码

public class Program
{
    public static void DescribeAnimal(IAnimal animal)
    {
        Console.WriteLine("My name is {0}, I am a {1}", animal.WhatIsMyName, animal.WhatAmI);
    }

    static void Main(string[] args)
    {
        Dog mydog = new Dog("Spot");
        Cat mycat = new Cat("Felix");
        DescribeAnimal(mydog);
        DescribeAnimal(mycat);
        Console.ReadKey();
    }
}

static方法DescribeAnimal接受一个IAnimal参数,并写出传入的WhatIsMyNameWhatAmI属性访问器返回的值IAnimal.

由于Animal工具IAnimal和两个DogCat继承Animal,任何CatDog对象可以作为一个参数传递给传递DescribeAnimal方法.

我希望我已经清楚地解释了这一点,如果有人觉得我的选择需要收紧,请发表评论,我很乐意编辑我的答案.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有