C# new 后 得到的却是一个空的对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# new 后 得到的却是一个空的对象相关的知识,希望对你有一定的参考价值。

是的 new只是一个新对象 如果你给了有参构造函数并且在函数里赋值了 那样它才不是空的对象
总而言之 无论如何 new出来就是空的 不管你以什么方式 都必须去赋值
参考技术A 这个主要是要看这个类的构造函数是什么样子了,new其实就是执行构造函数的过程,如果构造函数里给某些属性赋值了,那么这些对象就会有默认值,如果没有 那么这些对象会是各自对应的数据类型的默认值,如int类型,如果构造函数里面,没有赋值,他的默认值是0,string类型就是"" 参考技术B 是滴,得到的当然是空对象。需要你赋值追问

ManagerPlay aa = new ManagerPlay();
// aa.name;
Debug.Log(aa);
这个有问题么? 却是null需要Manager类么?

追答

需要啊
class Manager
String name;
public String getName()
return name;

public void setName(String name)
name = "快乐的JB毛 ";
this.name = name;

来自:求助得到的回答
参考技术B 你继承了什么东西吧 比如unity3d里继承MonoBehaviour就会new 出空

Unity 通过Type来new对象

参考技术A 在c#里可以通过Type来获得对应的类型。
例如 int a = 4;
a.GetType(); 就可以得到一个int32的类型。
如果是 Class test a;
a.GetType(); 就可以得到一个test的类型。

那么GetType和另一个相似的typeof()有什么区别呢?
1. 使用方式不同,typeof传入的是一个类型,例如typeof(int), typeof(test);返回的是对应类型的type;
而GetType是传入一个变量或者是通过自身调用,例如int a = 3, a.GetType();返回一个int 的 type;
或者是Type.GetType("test"); 这样就返回一个test的type;
2. typeof是全小写的。哈哈哈哈哈

那么获得一个Type类型的变量怎么new出一个对应的对象呢。我们先来了解Type可以得到什么东西:
1.GetEnumNames() 返回枚举值数组,但是对应的必须是一个枚举类type才可以调用这个方法,不然会抛出异常。

2.GetEnumName(object) 需要传入一个值获得对应的枚举值,例如 enum Day h1 =1, h2 =2, h3 = 5
GetEnumName(1) 得到的就是一个h1,2得到的是h2, 3会得到null, 5 才会得到h3。

3.GetArrayRank() 返回数组类型的维度。必须是数组类型的不然会抛出异常,int [,] a = new [3,10]; 这是返回的是2,代表2维。

4.GetConstructors() 返回一个ConstructorInfo数组,获得构造器列表。

5.GetConstructor() 传入一个Type[]数组 返回一个ConstructorInfo对象,获得构造器。
当传入的type是一个Type[0]的数组,就是默认没有参数走的是默认构造函数,如果是Type[1]走的是一个参数的构造函数,
那么如果同时存在两个一个参数的构造函数怎么办,其实是通过type的类型判断的他会找对应的构造函数。
float a = 3.4;
现在有两个test(float a),test(int a), type.GetConstructor(new Type[1] a.GetType() );这样实际上得到的是test(float)的
够造函数。

6.GetCustomAttribute() 传入一个Type 返回一个 Attribute ,用于获得挂载在Type上的Attribute。

7.GetMethod(string); 传入方法名称获得对应的方法。返回的是一个MethodInfo。

那么我们怎么通过Type来new一个对象呢?
我们可以这样:

除了上面获得全部构造器的方式,我们还可以这样获得一个指定的构造函数

这时候得到的是一个没有参数的构造函数。

那么我要得到一个float的构造函数怎么做呢?

同理如果是多个参数也需要传入多个类型的Type。
假设我们现在有一个三个参数的构造函数分别是 int float string

还有一种获得构造器的方法,但是我觉得这个用起来没有那么方便。

同理这个也是获得一个无参数的够造函数,但是这个上面介绍的方法有什么区别呢,他多一个BindingFlags通过这个关键字来搜索构造器。

tips:
如果你的Type填写正确的类名却得到一个null,你需要考虑一下是不是你没有把类名的命名空间写进去
必须是全名称。

到这里通过Type来new出对应的对象就介绍完了,如果发现本文出现什么不正确的地方还请大家指出,谢谢大家的观看。

以上是关于C# new 后 得到的却是一个空的对象的主要内容,如果未能解决你的问题,请参考以下文章

Unity 通过Type来new对象

c# 中类的实例化

C# 在使用 StreamWriter 时得到空的 .txt

C#怎么实例化对象?具体是实例化啥?

C#中的结构体要使用new来实例化吗?还是直接声明后直接使用?

C#中new一个对象的过程说明