实现相同属性的 C# 类

标签 c# oop

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

例如

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/

相关文章:

c++ - 您如何通过构造函数初始化所有对象?

c++ - 为什么这个指针(WndProc 内的游戏)为 NULL?

c# - C#使用SoundPlayer暂停和恢复

c# - 抑制未处理的异常对话框?

c# - 在 Visual Studio 2008 for .NET CF 中处理不同的分辨率

Java 对象方法堆栈帧参数

objective-c - 在 NSObject 子类的自定义 init 方法中使用 self = [super init]

c# - 按值对复杂类型进行分组

c# - 未应用 CSS 样式

javascript - 应该查看触发事件吗?