简体   繁体   English

可以抽象类继承另一个抽象类c#

[英]can abstract class inherit another abstract class c#

I'm beginner in C# & EF. 我是C#和EF的初学者。 I got a silly doubt while designing my new sample aplication. 在设计我的新样本应用程序时,我有一个愚蠢的疑问。 Can an abstract inherits another abstract class 抽象是否可以继承另一个抽象类

using System;
using System.ComponentModel.DataAnnotations;

namespace Spark.BusinessObjects.Common
{
   public abstract class BOBase
   {
    public virtual int UpdatedBy { get; set; }

    [DataType(DataType.DateTime)]
    public virtual DateTime UpdatedOn { get; set; }
 }

  public abstract class MasterBOBase : BOBase
 {
    public virtual int CreatedBy { get; set; }

    [DataType(DataType.DateTime)]
    public virtual DateTime CreatedOn { get; set; }
 }
}

namespace Spark.BusinessObjects.UserManagement
{
 using System;
using System.Data.Linq.Mapping;
using System.ComponentModel.DataAnnotations;

using Spark.BusinessObjects.Common;

[Table(Name = "tblUser")]
public class User:BOBase
{
    [Key]        
    public virtual int UserID { get; set; }

    [StringLength(maximumLength:40,MinimumLength=10)]
    [DataType(DataType.EmailAddress)]
    public virtual string EMailID { get; set; }

    [StringLength(maximumLength: 20, MinimumLength = 6)]
    [DataType(DataType.Password)]
    public virtual string Password { get; set; }

    [StringLength(maximumLength: 20, MinimumLength = 3)]
    public virtual string FirstName { get; set; }

    [StringLength(maximumLength: 20, MinimumLength = 1)]
    public virtual string LastName { get; set; }

    [DataType(DataType.Date)]
    public virtual DateTime DOB { get; set; }

}

public class UserRole:MasterBOBase
{
    [Key]
    public virtual int UserID { get; set; }
    public virtual  int UserRoleName { get; set; }
}
}

I don't need CreatedBy & CreatedOn properties in my master tables.Can i use like above. 我的主表中不需要CreatedBy和CreatedOn属性。我可以像上面一样使用。 Is it correct? 这是正确的吗?

Sure, an abstract class can inherit from another class!! 当然,抽象类可以从另一个类继承!

The only time a class cannot inherit from another is when the class you wish to inherit from is sealed or has private constructors only. 类无法从另一个类继承的唯一时间是您希望继承的类是密封的还是仅具有私有构造函数。

Yes you can inherit an abstract class from another abstract class. 是的,您可以从另一个抽象类继承一个抽象类。

You can find a example below: 你可以在下面找到一个例子:

public abstract class BaseClass1
{
    public abstract string Method();
}

public abstract class BaseClass2 : BaseClass1
{
}

public class UserClass : BaseClass2
{
    string name;
    public override string Method()
    {
      return name;
    }
}

If you want to use the method Method() in BaseClass2 also you can override the method from BaseClass1 如果要在BaseClass2中使用Method() ,也可以从BaseClass1覆盖该方法

in BaseClass2 you can put public override abstract string Method(); 在BaseClass2中你可以把public override abstract string Method(); within in, but with or without it the intended action is moreover the same. 在内,但有或没有它预期的行动也是相同的。

Absolutely, an Abstract class can inherit from both non-abstract classes and other abstract classes. 当然,Abstract类可以从非抽象类和其他抽象类继承。 When you want any class to inherit from another class, you will want to watch out (most of the time) for the sealed modifier. 当您希望任何类继承自另一个类时,您需要注意(大多数时候) 密封修饰符。

Yes, An Abstract class can inherit from a concrete class(non-Abstract class) and can also inherit from the following- 是的,一个抽象类可以从一个具体的类(非抽象类)继承,也可以从以下继承 -

  • Abstract Class 抽象类
  • Concrete class 具体课程
  • Interface 接口

According to inheritance concept in C#, an Abstract class can inherit from only one class either it can be Abstract or Concrete class but it can inherit from multiple interface. 根据C#中的继承概念,Abstract类只能从一个类继承,既可以是Abstract类,也可以是Concrete类,但它可以从多个接口继承。

However, you can not inherit from a sealed class. 但是,您不能从密封类继承。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM