一、使用new关键字

这个是我们使用最多的方式,创建简单,但是扩展性较差

二、使用工厂方法

工厂方法是一种设计模式,通过在类中定义静态方法来创建对象,把对象创建过程封装在方法内部

比如:

using System;

namespace SimpleFactorySample

{

class ChartFactory

{

//静态工厂方法

public static Chart GetChart(string type)

{

Chart chart = null;

if(type.Equals("histogram"))

{

chart=new HistogramChart();

Console.WriteLine("初始化设置柱状图");

}

else if(type.Equals("pie"))

{

chart=new PieChart();

Console.WriteLine("初始化设置饼状图");

}

else if(type.Equals("pie"))

{

chart=new LineChart();

Console.WriteLine("初始化设置折线图");

}

return chart;

}

}

}

创建的时候就是:

using System;

namespace SimpleFactorySample

{

class Program

{

static void Main(string[]args)

{

Chart chart;

//读取配置文件

string chartStr=ConfigurationManager.AppSettings["chartType"];

chart = ChartFactory.GetChart(chartStr); //通过静态工厂方法创建产品

chart.Display();

Console.Read();

}

}

}

chart = ChartFactory.GetChart(chartStr);

三、使用反射

反射是一种在运行时动态创建对象的机制,通过使用System.Reflection,可以在运行时通过类型信息创建对象,比如:

ClassName obj = (ClassName)Activator.CreateInstance(typeof(ClassName));

但是这里我们得说一下反射得原理:

反射的原理基于.NET平台中的元数据和类型信息。每个类型在编译后都会包含一些元数据,这些元数据描述了类型的结构、成员、方法等信息。当我们使用反射时,运行时环境通过读取这些元数据来获取类型的详细信息,然后我们可以使用这些信息来创建对象、调用方法等操作。

这里可以说一下typeof和反射得关系,typeof运算符是获取了类型得元数据,这是在某些情况下可能用于编译时的类型检查或获取静态信息,而不涉及动态的成员访问或操作

Type type = typeof(MyClass);

MethodInfo method = type.GetMethod("MyMethod");

而使用反射是这样得

using System;

using System.Reflection;

public class MyClass

{

public void MyMethod()

{

Console.WriteLine("Hello, Reflection!");

}

}

public class Program

{

public static void Main()

{

Type type = typeof(MyClass);

object obj = Activator.CreateInstance(type);

MethodInfo method = type.GetMethod("MyMethod");

method.Invoke(obj, null);

}

}

使用Activator.CreateInstance 方法创建了 MyClass 的实例 obj,

四、使用对象克隆

如果实现了ICloneable接口,使用Clone方法来创建对象副本:

ClassName obj = originalObj.CLone() as ClassName;

五、使用序列化和反序列化

将对象序列化转化为字节流或其他格式,然后反序列化位对象,可以创建对象的副本,这通常用于对象的深度复制或在进程之间传输对象,比如JSON或XML的序列化和反序列化

有关序列化和反序列化,可以说的再多一些,在C#中,序列化包括二进制序列化(BinaryFormatter),XML序列化(XML Serialization),JSON序列化(JSON Serialization),

在Unity中,当一个Private对象前加上[Serializable]后,序列化器就会使用反射来获取类型得所有字段和属性,并对它们进行序列化,底层就是通过反射来获取类或者对象的信息

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: