c# - 我应该在一般领域使用什么模式?

标签 c# .net oop

<分区>

我有一个类 Field,其中有两个子类 AccountFieldDecimalField

class Field{//some properties} 

class DecimalField : Field {...}

class AccountField : Field {...}

然后我有另一个类 Data,它有一个 Field 类型的成员属性。

但是它有问题。如果我将 DecimalField 变量分配给 Data 中的 Field 属性,那么我将无法使用 DecimalFields 的某些属性,而且Accountfield 变量也一样...

我必须做什么?我必须使用哪种模式?

我正在使用 C# 4.0 和 MS Studio 2010

最佳答案

是的,你可以。

假设您有这样的字段类

public class Field
{
   public string Property1{get;set;}
   public int Property2 {get;set;}
}

和这样的小数字段类

  public class DecimalField:Field
   {
    public int DecimalFieldProperty {get;set;}
}

,和这样的Accountfield

public class AccountField:Field
    {
       public double Balance{get;set;}
}

,假设您有一个名为 DoSomething 的方法,它需要一个 Field 类型的参数,如下所示

void DoSomething(Field field)
{}

然后要获取传入的具体类型,您可以执行以下操作

    void DoSomething(Field field)
    {
        var decimalField = field as DecimalField;

        //Do something with the decimal field instance
        if(decimalField  !=null)
         {
           Console.WriteLine("Decimal Field Property {0}",decimalField .DecimalFieldProperty );
          return;

        }

        //Cast the field as a account field instance
      var accountField = field as AccountField;
       if(accountField !=null)
       {
         Console.WriteLine("Balance {0}", accountField.Balance );

        return;
      }

      //Do something else with the normal field
    Console.WriteLine("Normal Field");

    }

关于c# - 我应该在一般领域使用什么模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11082929/

相关文章:

c# - System.Net.Mail代码无法访问smtp服务器

c++ - 为什么我不能在初始化列表中初始化静态变量?

Python父类访问子私有(private)变量

c# - 有没有什么时候我应该将 ViewModel 传递到我的 Controller 的一个操作方法中?

c# - NEST2:如何一次指定数据库索引名称

c# - 如何将我的数字存储到数组中?

c# - 异步方法是否必须使用 "await"关键字?

.net - 获取VB.NET中的程序路径?

Python 动态继承 : How to choose base class upon instance creation?

c# - C++/命令行界面 : Advantages over C#