[英]How to Display List of Classes and it properties in a propertygrid that implement an interface 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.