![](/img/trans.png)
[英]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.