簡體   English   中英

可以抽象類繼承另一個抽象類c#

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

我是C#和EF的初學者。 在設計我的新樣本應用程序時,我有一個愚蠢的疑問。 抽象是否可以繼承另一個抽象類

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; }
}
}

我的主表中不需要CreatedBy和CreatedOn屬性。我可以像上面一樣使用。 這是正確的嗎?

當然,抽象類可以從另一個類繼承!

類無法從另一個類繼承的唯一時間是您希望繼承的類是密封的還是僅具有私有構造函數。

是的,您可以從另一個抽象類繼承一個抽象類。

你可以在下面找到一個例子:

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;
    }
}

如果要在BaseClass2中使用Method() ,也可以從BaseClass1覆蓋該方法

在BaseClass2中你可以把public override abstract string Method(); 在內,但有或沒有它預期的行動也是相同的。

當然,Abstract類可以從非抽象類和其他抽象類繼承。 當您希望任何類繼承自另一個類時,您需要注意(大多數時候) 密封修飾符。

是的,一個抽象類可以從一個具體的類(非抽象類)繼承,也可以從以下繼承 -

  • 抽象類
  • 具體課程
  • 接口

根據C#中的繼承概念,Abstract類只能從一個類繼承,既可以是Abstract類,也可以是Concrete類,但它可以從多個接口繼承。

但是,您不能從密封類繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM