Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在多态到接口对象之后,如何保持从一个类继承的属性?_C#_Inheritance_Interface - Fatal编程技术网

C# 在多态到接口对象之后,如何保持从一个类继承的属性?

C# 在多态到接口对象之后,如何保持从一个类继承的属性?,c#,inheritance,interface,C#,Inheritance,Interface,(更新:我注意到,Quit方法不需要参数,我认为它必须这样做,这使它过于复杂。我现在要调整它,看看它是否有效。) 我有两个类,Employee和Person,以及一个名为iQuittable的接口。Employee从Person继承FirstName和LastName的属性 我应该使用多态性来创建接口的对象IQuittable,并对其调用Quit方法。由于Employee也从IQuittable继承,所以我尝试将Employee变形为IQuittable对象。问题是,一旦变形,它就不再具有访问P

(更新:我注意到,Quit方法不需要参数,我认为它必须这样做,这使它过于复杂。我现在要调整它,看看它是否有效。)

我有两个类,Employee和Person,以及一个名为iQuittable的接口。Employee从Person继承FirstName和LastName的属性

我应该使用多态性来创建接口的对象IQuittable,并对其调用Quit方法。由于Employee也从IQuittable继承,所以我尝试将Employee变形为IQuittable对象。问题是,一旦变形,它就不再具有访问Person属性的权限。Quit方法涉及Person的FirstName和LastName,因此我尝试将这些属性放入接口文件中,并很快意识到这是不可能的

我如何将Employee变形为IQuittable并仍然保留Person的属性

注意:我将Quit方法的参数更改为采用iQuittable参数而不是Employee,因为我在Employee上使用了多态性。这不对吗?有些地方“雇员”仍然完好无损,因为我试图更改它,但它仍然给我错误,我不确定是否应该更改

如果有人能看看我下面的代码,告诉我应该调整什么,以便在iQuittable对象上调用Quit,并且仍然具有FirstName和LastName属性,我将不胜感激

**Program file:**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace interfaces
{
    class Program
    {
        static void Main(string[] args)
        {
            IQuittable NewEmployee = new Employee();

            NewEmployee.FirstName = "Kitty";
            NewEmployee.LastName = "Katz";

            NewEmployee.Quit(NewEmployee);
            Console.ReadLine();
        }
    }
}

**Person file:**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace interfaces

{
    public abstract class Person
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }
    }
}

**Employee file:**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace interfaces
{
    class Employee : Person, IQuittable
    {     
        public void Quit(IQuittable Quitter)
        {
            Console.WriteLine(Employee.FirstName + " " + Employee.LastName + " has quit.");
        }
    }
}

**Interface file:**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace interfaces
{
    interface IQuittable
    {
         void Quit(IQuittable Quitter);
    }
}

我对示例代码有点困惑。要澄清的是,传递到Quit中的IQuittable是否总是它自己?在这种情况下,IQuittable.Quit不需要接受任何参数。你可以用这个。FirstName,等等。这很有意义,我不知道为什么我认为它必须有一个参数作为开始。。但你是对的!我现在试着换一下。非常感谢。我对示例代码有点困惑。要澄清的是,传递到Quit中的IQuittable是否总是它自己?在这种情况下,IQuittable.Quit不需要接受任何参数。你可以用这个。FirstName,等等。这很有意义,我不知道为什么我认为它必须有一个参数作为开始。。但你是对的!我现在试着换一下。非常感谢。
class Program
{
    static void Main(string[] args)
    {
        IQuittable NewEmployee = new Employee();

        ((Employee)NewEmployee).FirstName = "Kitty";
        ((Employee)NewEmployee).LastName = "Katz";

        NewEmployee.Quit(NewEmployee);
        Console.ReadLine();
    }
}

interface IQuittable
{
    void Quit(IQuittable Quitter);
}

public abstract class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }
}

class Employee : Person, IQuittable
{
    public void Quit(IQuittable Quitter)
    {
        Console.WriteLine(this.FirstName + " " + this.LastName + " has quit.");
    }
}