您的位置:首页 > 其它

一直想得到这样一个函数,创建类的一个实例,该类由指定的泛型参数指定

2017-06-05 15:12 337 查看
创建类型的一个实例,该类型由指定的泛型类型参数指定。也就是创建一个泛型参数所属类型的对象。
C#
public static T CreateInstance<T>()

类型参数
T
要创建的类型。
返回值
类型:T
对新创建对象的引用。

通常情况下,在应用程序代码中无需使用 CreateInstance,因为在编译时类型必须是已知的。如果编译时类型已知,则可以使用正常的实例化语法(在 C# 中为 new 运算符)。

不存在带参数列表的 CreateInstance 泛型方法的重载,因为 CreateInstance 的非泛型重载已经提供了后期绑定构造函数决策。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//方法一、获得学生对象 new Student()
new Student().Say("张三");

//方法二、获得学生对象 Student.GetInstance
Student.GetInstance.Say("李四");
}
}
class Student
{
public string stuName = string.Empty;

public static Student GetInstance
{
get
{
return SingleItem<Student>.GetInstance();
}
}

public void Say(String strName)
{
Console.WriteLine("我的名字是:" + strName);
}
}

static class SingleItem<T>
{
/// <summary>
/// 获得T的对象
/// </summary>
/// <returns></returns>
public static T GetInstance()
{
return TryGetInstance(null);
}

/// <summary>
/// 获得T的对象
/// </summary>
/// <param name="onCreateInstance"></param>
/// <returns></returns>
private static T TryGetInstance(Func<T> onCreateInstance)
{
try
{
if (onCreateInstance == null)
return Activator.CreateInstance<T>();
else
return onCreateInstance();
}
catch
{
return default(T);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐