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