将接口或类属性继承到派生类中

时间:2015-06-03 14:00:58

标签: c# inheritance

我想将我的接口或类属性继承到派生类中,因为这里的属性是我的代码:

  public class Login : Customer
{
    ??
}
interface Customer
{
    string Name { get; set; }
    string pdw { get; set; }
}

但是我无法做到这一点,请告诉我实现我的要求的最佳方式。

5 个答案:

答案 0 :(得分:1)

您没有在界面中指定代码,因此没有任何内容可以继承。一个类实现一个接口,它不会继承它。

但是,如果要为派生类提供代码,则可以编写一个基类来包含它。

通常,您希望提供一个实现某些接口(但不是全部)的基类。您可以通过编写实现接口部分的 abstract 基类来实现,并将未实现的方法声明为 abstract

一个例子将澄清:

interface ICustomer
{
    string Name     { get; set; }
    string Password { get; set; }

    string SomeOtherMethod();
}

public abstract class CustomerBase : ICustomer
{
    public string Name     { get; set; }
    public string Password { get; set; }

    // We do not implement SomeOtherMethod() here.
    // Instead, make it abstract to force a non-abstract derived class to implement it:

    public abstract string SomeOtherMethod();
}

class Login: CustomerBase
{
    // This class does not need to implement Name or Password,
    // because it can inherit them from CustomerBase.
    // However it must still implement SomeOtherMethod()
    // because that method is declared abstract in the base class.

    public override string SomeOtherMethod()
    {
        return "Implemented by me";
    }
}

答案 1 :(得分:0)

看看这个例子,我认为你的路线走错了。

继承与实现接口不同。

接口更像是契约,其中实现它的类也必须遵守: -

public interface ISendMessage
{
    void Send();
}

public class SmsSender : ISendMessage
{
    public void Send()
    {
        // Code to send SMS
    }
}

public class EmailSender : ISendMessage
{
    public void Send()
    {
        // Code to send Email
    }
}

继承,通常用于具有基类的类,其他类似类可以继承其基本属性。

示例基类是Vehicle: -

 public class Vehicle
    {
        public string Manufacturer { get; set; }
        public string Model { get; set; }
        public int ManufactureYear { get; set; }
        public string RegNumber { get; set; }
        public decimal Value { get; set; }
    }

Vehicle类的所有属性均适用于卡车,摩托车,汽车或公共汽车。

但摩托车和汽车有不同的属性,不能像这样: -

 public class MotorBike : Vehicle
    {

    }

    public class Car : Vehicle
    {
        public int NumberOfDoors { get; set; }
        public int NumberofSeatBelts { get; set; }
    }

答案 2 :(得分:0)

实施界面。

interface Customer
{
   // Property signatures: 
   string Name 
   {
      get;
      set;
   }

   string pdw 
   {
      get;
      set;
   }
}

class Login : Customer
{
   // Fields: 
   private string _name;
   private string _pdw;

   // Constructor: 
   public Login ()
   {

   }

   // Property implementation: 
   public string name
   {
      get
      {
         return _name;
      }

      set
      {
         _name = value;
      }
   }

   public string pdw
   {
      get
      {
         return _pdw;
      }
      set
      {
         _pdw = value;
      }
   }
}

答案 3 :(得分:0)

public class Login : ICustomer
{
    public string Name { get; set; }
    public string Pdw { get; set; }
}

interface ICustomer
{
    string Name { get; set; }
    string Pdw { get; set; }
}

var loginModel = new Login();

//then access loginModel.Name & loginModel.Pdw

始终对您的属性使用上层方法。 Pdw不是pdw。

并且始终使用ISomething声明您的接口,例如ICustomer,而不是Customer。

基本上你的模型的接口是有害的(长期项目)或者至少这是我的观点。

保留架构,存储库,总线等接口。

让你的模型保持幂等,没有依赖。 (或者至少没有那么多的依赖)

^依赖项等于接口或其他类。

答案 4 :(得分:0)

另一个对此有何看法?而不是interface

public class Customer
{
    public string Name { get; set; }
    public string pdw { get; set; }
}

public class Login : Customer
{

}

Login类现在可以访问基类属性,而不必自己实现它们。

当然,如果您无法控制原始界面的使用,请忽略此答案,因为它只是展示其他方法的一种方法。