zoukankan      html  css  js  c++  java
  • 【代码保留】成对值类(PairCollection和Pair

    第一次泛型编程(以前从来也只有用过List<T>之类的)
    不知道会有什么问题呢?继承IList的部分没有注释了,MSDN可以查的。欢迎提意见噢~
    你可能会看到下面的类用多种方式实现了同样的效果,有多态,有模版,还有包装wrapper(不知道是不是恰当)……还用了泛型……
    实际项目中,如果有可取之处,请只取其中一种就可以了……(计划中……)

    补充一张VS自动生成的类图


    using System;
    using System.Collections.Generic;
    using System.Collections;

    namespace CA_PairCollection
    {
        
    /// <summary>
        
    /// 基础格式化机制
        
    /// </summary>
        
    /// <typeparam name="T"></typeparam>

        interface IFormat<T>
        
    {
            T GetFormat();
        }


        
    /// <summary>
        
    /// 格式化模板接口
        
    /// </summary>

        interface IFormatTemplate
        
    {
            
    /// <summary>
            
    /// Text模版,形如:"Text = "
            
    /// </summary>

            string TextTemplate get;set;}
            
    /// <summary>
            
    /// Value模版,形如:"Value = "
            
    /// </summary>

            string ValueTemplate get;set;}
            
    /// <summary>
            
    /// 分隔符模版,形如:","
            
    /// </summary>

            string Separator get;set;}
        }


        
    /// <summary>
        
    /// 提供用于格式化对象的模板的格式化机制
        
    /// </summary>

        interface IFormatProvider
        
    {
            
    string GetFormat(IFormatTemplate formatTemplate);
        }


        
    /// <summary>
        
    /// 格式化模板类
        
    /// </summary>

        class FormatTemplate : IFormatTemplate
        
    {
            
    public FormatTemplate(string textTemplate,string separator,string valueTemplate)
            
    {
                
    this.textTemplate = textTemplate;
                
    this.separator = separator;
                
    this.valueTemplate = valueTemplate;
            }


            
    private string textTemplate;
            
    private string separator;
            
    private string valueTemplate;
            
    IFormatTemplate 成员
        }


        
    /// <summary>
        
    /// 成对参数类
        
    /// </summary>
        
    /// <typeparam name="U"></typeparam>
        
    /// <typeparam name="V"></typeparam>

        class Pair<U, V> : IFormat<string>, IFormatProvider
        
    {
            
    public Pair() { }
            
    public Pair(U text, V value)
            
    {
                
    this.text = text;
                
    this.value = value;
            }


            
    private U text;
            
    public U Text
            
    {
                
    get
                
    {
                    
    return this.text;
                }

                
    set
                
    {
                    
    this.text = value;
                }

            }


            
    private V value;
            
    public V Value
            
    {
                
    get
                
    {
                    
    return this.value;
                }

                
    set
                
    {
                    
    this.value = value;
                }

            }


            
    IFormat 成员

            
    IFormatProvider 成员

        }


        
    /// <summary>
        
    /// 成对参数类集合
        
    /// </summary>
        
    /// <typeparam name="U"></typeparam>
        
    /// <typeparam name="V"></typeparam>

        class PairCollection<U, V> : IList<Pair<U, V>>, IFormat<string>, IFormatProvider
        
    {
            
    private IList<Pair<U, V>> pairs;

            
    public PairCollection()
            
    {
                pairs 
    = new List<Pair<U, V>>();
            }

            
            
    IListPairU,V 成员

            
    ICollectionPairU,V 成员

            
    IEnumerablePairU,V 成员

            
    IEnumerable 成员

            
    IFormat 成员

            
    IFormatProvider 成员
        }


        
    /// <summary>
        
    /// 实现了中文式成对参数的类
        
    /// </summary>
        
    /// <typeparam name="U"></typeparam>
        
    /// <typeparam name="V"></typeparam>

        sealed class ChinesePair<U, V> : Pair<U, V>
        
    {
            
    public ChinesePair()
                : 
    base()
            
    { }
            
    public ChinesePair(U text,V value)
                : 
    base(text, value)
            
    { }
            
    public override string GetFormat()
            
    {
                
    return "文本 = " + this.Text.ToString() + "; 值 = " + this.Value.ToString();
            }

        }


        
    /// <summary>
        
    /// 实现了英文式成对参数的类
        
    /// </summary>
        
    /// <typeparam name="U"></typeparam>
        
    /// <typeparam name="V"></typeparam>

        sealed class EnglishPair<U, V> : Pair<U, V>
        
    {
            
    public EnglishPair()
                : 
    base()
            
    { }
            
    public EnglishPair(U text, V value)
                : 
    base(text, value)
            
    { }
            
    public override string GetFormat()
            
    {
                
    return "Text = " + this.Text.ToString() + "; Value = " + this.Value.ToString();
            }

        }


        
    /// <summary>
        
    /// 键值均为string类型的一个类型包装
        
    /// </summary>

        class KVPairCollection : PairCollection<stringstring>,IFormat<string>
        
    {
            
    private PairCollection<stringstring> p;
            
    public KVPairCollection()
            
    {
                p 
    = new PairCollection<stringstring>();
            }


            
    IFormat 成员
        }


        
    class Program
        
    {
            
    static void Main(string[] args)
            
    {
                
    //
                
    //以下示例用多种方式实现了成对类的格式化输出
                
    //

                PairCollection
    <stringstring> psBases = new PairCollection<stringstring>();
                psBases.Add(
    new Pair<stringstring>("baseText1""baseValue1"));
                psBases.Add(
    new Pair<stringstring>("baseText2""baseValue2"));
                
    foreach (Pair<stringstring> p in psBases)
                
    {
                    Console.WriteLine(p.GetFormat());
                }


                Console.WriteLine(
    "----------------------");

                PairCollection
    <stringstring> psPloyStrings = new PairCollection<stringstring>();
                psPloyStrings.Add(
    new ChinesePair<stringstring>("textChinese1""valueChinese1"));
                psPloyStrings.Add(
    new EnglishPair<stringstring>("textEnglish1""valueEnglish1"));
                
    foreach (Pair<stringstring> p in psPloyStrings)
                
    {
                    Console.WriteLine(p.GetFormat());
                }


                Console.WriteLine(
    "----------------------");

                PairCollection
    <stringint> psPloyInts = new PairCollection<stringint>();
                psPloyInts.Add(
    new ChinesePair<stringint>("textChinese1"1));
                psPloyInts.Add(
    new EnglishPair<stringint>("textEnglish1"2));
                
    foreach (Pair<stringint> p in psPloyInts)
                
    {
                    Console.WriteLine(p.GetFormat());
                }


                Console.WriteLine(
    "----------------------");

                Console.WriteLine(psPloyStrings.GetFormat());
                Console.WriteLine(psPloyInts.GetFormat());

                Console.WriteLine(
    "----------------------");

                KVPairCollection kvs 
    = new KVPairCollection();
                kvs.Add(
    new ChinesePair<stringstring>("textChinese1""valueChinese1"));
                kvs.Add(
    new EnglishPair<stringstring>("textEnglish1""valueEnglish1"));
                kvs.Add(
    new Pair<stringstring>("textBase1""valueBase"));
                Console.WriteLine(kvs.GetFormat());

                Console.WriteLine(
    "----------------------");

                PairCollection
    <stringstring> pFormatProvider = new PairCollection<stringstring>();
                pFormatProvider.Add(
    new ChinesePair<stringstring>("textChinese1""valueChinese1"));
                pFormatProvider.Add(
    new EnglishPair<stringstring>("textEnglish1""valueEnglish1"));
                Console.WriteLine(pFormatProvider.GetFormat((IFormatTemplate)(
    new FormatTemplate("模版Text = "," ; ""模版Value = "))));
            }

        }

    }

  • 相关阅读:
    动态调用WebService以及传递复杂对象
    2021.1112月 SQL、前端、Java文章学习及资源记录
    字符串导出word
    Dapper 返回存储过程值
    SQL2008 查询XML
    兼容各浏览器的iframe方法
    .net 后台任意设置 控件显示和隐藏就OK
    List 增删该查
    iis 7上发布mvc报错:403.14Forbidden Web 服务器被配置为不列出此目录的内容
    kafka使用入门api2
  • 原文地址:https://www.cnblogs.com/volnet/p/863402.html
Copyright © 2011-2022 走看看