gpt4 book ai didi

实现相同属性的 C# 类

转载 作者:行者123 更新时间:2023-12-05 08:58:51 26 4
gpt4 key购买 nike

我有几个具有相同属性的类。

例如

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

如您所见,这些类共享相同的属性,我正在尝试了解接口(interface)和抽象类。

  • 您将如何通过创建一个接口(interface)来组织这些类持有他们共享的东西?
  • 界面是最好的方式吗?
  • 我可以将这些类添加到接口(interface)类型的列表中吗以便我无需强制转换即可访问属性?
  • 为什么是接口(interface),为什么是抽象类,它们有什么优势互相争吵

最佳答案

我会这样做:

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

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

已更新以更好地回答 OP Q

接口(interface)指定了实现接口(interface)的对象必须遵循的契约。而抽象基类提供了一种方法,可以在所有继承自它的对象中自动实现接口(interface)。

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

所以在那个例子中,接口(interface) IBase 说所有的实现者都必须包含这两个属性来满足契约。这在遵循控制反转 IoC 或依赖注入(inject)模式时尤其有用。这允许您在新对象上实现接口(interface)并保持任何以 IBase 作为参数的兼容性。抽象类实现接口(interface),然后由从基类继承的任何对象继承。基本上,通过使用抽象基类,您不必专门实现子对象中的每个属性。

关于实现相同属性的 C# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20111578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com