• 不同类型与通用基类的返回列表

  • 本文关于 c#,oop,泛型generics
  • CodeGo.net > 不同类型与通用基类的返回列表
  •  

    不同类型与通用基类的返回列表



    c# oop 泛型generics
    我设计应该返回实例的列表,每个实例实际上是一个不同的数据类型。 下面是我的设计稿,我需要一个为它
    public class abstract Base
    {
     //DataType is an enum
     public abstract DataType Type { get; set; }
     public abstract BaseType Value { get; set; }
    }
    public abstract class BaseType
    {
    }  
    public class MyString:BaseType
    {
    }  
    public class MyInt:BaseType
    {
    }  
     //string for example 
    public class Type1:Base
    {
     public override DataType Type
     {
      get { return DataType.Type1; }
      set;
     }
     public override BaseType Value
     {
      get { return new MyString("a"); }
      set;
     }
    }
    public class Type2:Base
    {
     public override DataType Type
     {
      get { return DataType.Type2; }
      set;
     }
     public override BaseType Value
     {
      //MyInt for example
      get { return new MyInt(10); }
      set;
     }
    }
    
    方法应该是
    List<Base> GetValues();
    
    来电预计写这样的
    List<Base> values = GetValues();
    foreach(var value in values)
    {
     switch(value.Type)
     {
      case DataType.MyString:
       MyString str = value.Value as MyString;
       break;
      case DataType.MyInt:
       MyInt str = value.Value as MyInt;
       break;
     }
    }
    
    我的问题是究竟是什么,最好的设计?可以仿制药更好,怎么样?
    本文地址 :CodeGo.net/1106161/
    -------------------------------------------------------------------------------------------------------------------------
    1.我会一个通用基类:
    public abstract class Base<T>
     where T : BaseType
    {
     public abstract DataType Type { get; }
     public abstract T Value { get; set; }
    }
    
    类型1现在是:
    public class Type1 : Base<MyString>
    {
     public override DataType Type
     {
      get { return DataType.MyString; }
     }
     public override MyString Value
     {
      get;
      set;
     }
    }
    
    不过,我不知道是什么GetValues是。如果返回类型的值的列表,也应该是通用的:
    public List<Base<T>> GetValues<T>()
     where T : BaseType
    {
     return theList;
    }
    
    如果它返回不同类型的你另一种非泛型基类:
    public abstract class Base
    {
     public abstract DataType Type { get; }
    }
    public abstract class Base<T> : Base
     where T : BaseType
    {
     public abstract T Value { get; set; }
    }
    
    GetValues方法是:
    public List<Base> GetValues()
    {
     return theList;
    }
    
    请注意,我所提出的非泛型部分进入非泛型基类,这样就可以将数据类型属性。 你需要转换的值到相应的类型,以访问Value属性:
    List<Base> values = GetValues();
    foreach (Base value in values)
    {
     switch (value.DataType)
     {
      case DataType.MyString:
       MyString myString = value as MyString;
       ...
      case DataType.MyInt:
       MyInt myInt = value as MyInt;
       ...
     }
    }
    
    看来你的DataType属性到一个对象的类型。这是没有必要的。你的is运算符:
    foreach (Base value in values)
    {
     if (value is MyString)
     {
      MyString myString = value as MyString;
      ...
     }
     else if (value is MyInt)
     {
      MyInt myInt = value as MyInt;
      ...
     }
    }
    

    本文标题 :不同类型与通用基类的返回列表
    本文地址 :CodeGo.net/1106161/
    1. 如何让.Net程序运行后删除自己??
    2. 解析类型层次结构的装配
    3. C# 如何调用Win32 API?
    4. “FormatException是未处理”而程序没有计算结果
    5. c# 里怎么使用 CreateObject
    6. 错误的ObjectDataSource找不到一个非泛型方法
    7. 知道excel文件名,路径,sheet名,怎样用windows程序(c#)改变excel文件指定行的颜色?
    8. VB.net发送UDP消息两倍
    9. 如何update 整列!
    10. 如何从非托管内存中读取布尔值,使用Marshal类?

     
    

    Copyright © 2017 CodeGo.net
    http://codego.net/xinwen/ 足球比分网 足球比分 医药招商网 邵阳县新闻