本人对这句声明不是很理解,求各位大大进行讲解一下
public abstract class XmlEntity<TEntity> where TEntity : XmlEntity<TEntity>, new()
    {
        /// <summary>
        /// 从一段XML文本中加载对象
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        public static TEntity Load(String xml)
        {
            if (String.IsNullOrEmpty(xml)) return null;            xml = xml.Trim();            XmlSerializer serial = new XmlSerializer(typeof(TEntity));
            using (StringReader reader = new StringReader(xml))
            {
                return (serial.Deserialize(reader) as TEntity);
            }
        }        /// <summary>
        /// 从一个XML文件中加载对象
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public static TEntity LoadFile(String filename)
        {
            if (String.IsNullOrEmpty(filename) || !File.Exists(filename)) return null;            XmlSerializer serial = new XmlSerializer(typeof(TEntity));
            using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
            {
                //return (serial.Deserialize(stream) as TEntity);
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    return (serial.Deserialize(reader) as TEntity);
                }
            }
        }        /// <summary>
        /// 输出XML
        /// </summary>
        /// <returns></returns>
        public virtual String ToXml()
        {
            XmlSerializer serial = new XmlSerializer(typeof(TEntity));
            using (MemoryStream stream = new MemoryStream())
            {
                using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8))
                {
                    serial.Serialize((TextWriter)writer, this);
                    byte[] bts = stream.ToArray();
                    String xml = Encoding.UTF8.GetString(bts);                    if (!String.IsNullOrEmpty(xml)) xml = xml.Trim();                    return xml;
                }
            }
        }        /// <summary>
        /// 保存到文件中
        /// </summary>
        /// <param name="filename"></param>
        public virtual void Save(String filename)
        {
            if (String.IsNullOrEmpty(filename)) return;            XmlSerializer serial = new XmlSerializer(typeof(TEntity));
            using (FileStream stream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Write))
            {
                //serial.Serialize(stream, this);
                using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8))
                {
                    serial.Serialize((TextWriter)writer, this);
                }
            }
        }
    }两个XmlEntity到底是什么约束,这种约束有什么用途呢

解决方案 »

  1.   

    where T:
    泛型约束,约束类型T必须具有无参的构造函数
    表示T必须是class类型或它的派生类。
    new()构造函数约束允许开发人员实例化一个泛型类型的对象。  
    一般情况下,无法创建一个泛型类型参数的实例。然而,new()约束改变了这种情况,要求类型参数必须提供一个无参数的构造函数。  
    在使用new()约束时,可以通过调用该无参构造函数来创建对象。  
    基本形式: where T : new()  
     
      

  2.   


    对于new()约束我知道是什么,但是我想知道的是
    XmlEntity<TEntity> where TEntity : XmlEntity<TEntity>这个是什么意思在具体的子类中我们使用
    public class XMLAttribute : XmlEntity<XMLAttribute>{}
    此时的XMLAttribute又是什么意思呢
      

  3.   

    对于new()约束我知道是什么,但是我想知道的是 
    XmlEntity <TEntity>   where   TEntity   :   XmlEntity <TEntity> 这个是什么意思 在具体的子类中我们使用 
    public   class   XMLAttribute   :   XmlEntity <XMLAttribute> {} 
    此时的XMLAttribute又是什么意思呢
      

  4.   

    简单地说,就是约束作为泛型的那个类型必须为某个类以及它的派生类。你可以认为 XmlEntity <XMLAttribute> 就相当于一个类。
      

  5.   

    XmlEntity类
    泛型参数<T>
      

  6.   

    泛型的类是一个半成品List<T> 半成品
    List<int> 类class A : B 表示 A 类从 B 类继承
    class A : List<int> 表示 A 类从 List<int> 继承再怎么通俗呢?