C# 类与类之间的嵌套,声明时子类对象为空的问题
来源:互联网 发布:淘宝商家申请 编辑:程序博客网 时间:2024/06/07 05:49
有时候我们会遇到一个问题,那就是类A包含了另外一个类B的对象,当我们new出来一个类A想直接获取类B的成员或赋值时会遇到报错,这是因为我们new出来的A类型对象只申请了其他成员的内存,其中包含的B类成员对象并没有分配内存,也就是类B的成员变量为空,当你想使用类B成员里面的数据时自然而然就报错了,所以在这种情况下,我们也要对类B的成员负责,也给他new一下。
举例说明:
1.先声明两个类,A和B,类A中包含类B的一个成员
class A
{
public string gender;
public B signal;
public A()
{
}
}
class B
{
public string name;
public B()
{
}
}
2.然后我们new一个类A的对象,直接引用类B中的成员
static void Main(string[] args)
{
A data = new A();
data.b.name = "傻瓜";
}
3.直接运行后会报错,如图所示data中的b对象为空,应用b对象中的成员name直接报错:
4.既然这样b对象是空的那就new一次再使用,打断点发现代码可以直接运行完毕,说明确实是需要new一次才能使用b中的成员
5.但朋友们有没有发现一个问题,当我们的类或者结构体多层次嵌套的时候,像类A中包含类B,类B中包含类C,当我们new一个A对象后,要是用里面的子集类成员岂不是要将里面包含的所有子类成员new一次,那实在是太麻烦了,所以呢在这里我在给出一个既简单又方便的方法,当然很多熟悉的朋友已经知道是怎么回事了,那就是利用类A的构造函数将包含的子类成员b给new出来,这样当我们直接使用b的成员时就不用一次次的去new啦!即使再多的层级嵌套都没关系啦:
class A
{
public string gender;
public B b;
public A()
{
b = new B();
}
}
class B
{
public string name;
public C c;
public B()
{
c = new C();
}
}
class C
{
public int age;
public C()
{
}
}
6.最后试验一次果然可以直接使用
总结:要使用对象中的引用类型成员,必须要在使用之前初始化,引用类型包括:<1>.类类型<2>.数组类型(包括List和Dictionary等)<3>.字符串类型<4>.委托类型,注意:结构体和枚举同int一样属于数值类型。
- C# 类与类之间的嵌套,声明时子类对象为空的问题
- 对象的转型(在父类与子类之间)
- Java子类与父类之间的对象转换
- fragment嵌套使用时getFragmentManager.findFragment()为空的问题
- 父类与子类之间的转换
- 父类与子类之间的转换
- 父类与子类之间的转换
- 超类与子类之间的关系
- 声明父类,new子类--java和c#的区别
- C#子类与父类的初始化
- 类之间的嵌套
- java类继承总结一 父类类型与子类类型之间的转化问题
- java类继承总结一 父类类型与子类类型之间的转化问题(转)
- java类继承总结一 父类类型与子类类型之间的转化问题
- C#中对象调用方法如果对象为空报异常的问题
- C#对象的声明与实例化
- 从0自学C#13--子类和父类方法的锁对象问题
- 父类和子类之间的转换问题
- 学习~笔记2
- Google Gson官方教程
- C语言学习的第五天
- MongoDB 基础学习
- python脚本学习(2)
- C# 类与类之间的嵌套,声明时子类对象为空的问题
- [ARC084]E
- sql语句实现多条数据合为一条数据
- Android----OKHttp网络请求-拦截器
- Java消息队列
- matplotlib基础
- 20171206
- php+apache+yaf框架开发环境搭建
- 软件光栅化渲染器一