簡體   English   中英

實現相同屬性的C#類

[英]C# classes that implement the same properties

我有幾個具有相同屬性的類。

例如

public class Decimalclass
{
   public string SqlColumnName {get;set;}
   public SqlDbType SqlColumnType {get;set;}
   public Decimalclass()
   {
      SqlColumnType = SqlDbType.Decimal;
   }
   //...
}

public class Textclass
{
  public string SqlColumnName {get;set;}
  public SqlDbType  SqlColumnType {get;set;}
  public Textclass()
   {
      SqlColumnType = SqlDbType.NVarChar;
   }
   //...
}

public class Intclass
{
  public string SqlColumnName {get;set;}
  public SqlDbType  SqlColumnType {get;set;}
  public Intclass()
   {
      SqlColumnType = SqlDbType.Int;
   }
   //...
}

如您所見,這些類共享相同的屬性,我試圖了解接口和抽象類。

  • 您如何通過建立一個包含它們共享的東西的界面來組織這些類?
  • 接口是最好的方法嗎?
  • 是否可以將這些類添加到接口類型列表中,以便無需強制轉換即可訪問屬性?
  • 為什么要使用接口以及為什么要使用抽象類,它們比其他方法有什么優勢

我將使SqlColumnType抽象和只讀,以強制在派生類中實現它。

public abstract class BaseClass
{
    public string SqlColumnName { get; set; }
    public abstract SqlDbType SqlColumnType { get; }
}

public class Intclass : BaseClass
{
    public override SqlDbType SqlColumnType
    {
        get { return SqlDbType.Int;  }
    }
}

我會做 :

public abstract class BaseClass
{
  public string SqlColumnName {get;set;}
  public SqlDbType  SqlColumnType {get;set;}
}

public class Intclass : BaseClass
{
   public Intclass()
   {
      base.SqlColumnType = SqlDbType.Int;
   }
}

更新以更好地回答運營問題Q

接口指定實現接口的對象必須遵循的協定。 雖然抽象基類提供了一種方法,以在從其繼承的所有對象中自動實現接口。

    interface IBase
    {
         string SqlColumnName { get; set; }
         SqlDbType SqlColumnType { get; set; }
    }

    public abstract class BaseClass : IBase
    {
        public string SqlColumnName { get; set; }
        public SqlDbType SqlColumnType { get; set; }
    }

    public class Intclass : BaseClass
    {
        public Intclass()
        {
            base.SqlColumnType = SqlDbType.Int;
        }
    }

因此,在該示例中,接口IBase表示所有實現者都必須包含這兩個屬性才能滿足合同要求。 這在遵循控制IoC轉換或依賴項注入模式時尤其有用。 這樣,您就可以在新對象上實現該接口,並保持兼容性(以IBase為參數)。 抽象類實現了接口,然后該接口將由從基類繼承的任何對象繼承。 基本上,通過使用抽象基類,您不必專門在子對象中實現每個屬性。

暫無
暫無

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

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