本人对这句声明不是很理解,求各位大大进行讲解一下
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到底是什么约束,这种约束有什么用途呢
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到底是什么约束,这种约束有什么用途呢
解决方案 »
- 怎么实现 粘贴之前获取这个粘贴的事件啊
- 求助,visual studio编译出错问题
- 用datagirdview 数据更新数据库
- 正则匹配的问题
- Windows服 -> Timer -> 怎么设置在某一时刻触发事件 ?
- 有关文件操作的问题,大家帮我想想怎么样处理才是最好的?
- .NET平台调用(P/Invoke)的问题
- 在线升级用webService好呢还是用socket好?
- Silverlight使用时,从工具箱拖拉控件到设计窗体时,抛出异常,System.NullReferenceException 未将对象引用设置到对象的实例。
- 图片显示问题
- C#怎么读取服务器上的数据库?
- webBrowser1打开本地文件如何设置文件点击按钮上传?
泛型约束,约束类型T必须具有无参的构造函数
表示T必须是class类型或它的派生类。
new()构造函数约束允许开发人员实例化一个泛型类型的对象。
一般情况下,无法创建一个泛型类型参数的实例。然而,new()约束改变了这种情况,要求类型参数必须提供一个无参数的构造函数。
在使用new()约束时,可以通过调用该无参构造函数来创建对象。
基本形式: where T : new()
对于new()约束我知道是什么,但是我想知道的是
XmlEntity<TEntity> where TEntity : XmlEntity<TEntity>这个是什么意思在具体的子类中我们使用
public class XMLAttribute : XmlEntity<XMLAttribute>{}
此时的XMLAttribute又是什么意思呢
XmlEntity <TEntity> where TEntity : XmlEntity <TEntity> 这个是什么意思 在具体的子类中我们使用
public class XMLAttribute : XmlEntity <XMLAttribute> {}
此时的XMLAttribute又是什么意思呢
泛型参数<T>
List<int> 类class A : B 表示 A 类从 B 类继承
class A : List<int> 表示 A 类从 List<int> 继承再怎么通俗呢?