C#创建类对象

来源:百度知道 编辑:UC知道 时间:2024/06/07 05:29:11
请问各位高手,C#中如何让一个类的对象只能由另一个类的对象来创建?

就像SqlDataReader对象只能由SqlCommand对象的ExecuteReader()方法来创建

实际上,创建一个对象,就是调用那个对象的构造函数,在离开构造函数的“}”(花括号)作用域之后,那个对象才算被创建,如果构造函数中有异常,或者使用跳转语句(如GOTO语句)离开作用域,该对象也是不能被创建的。
至于你说的让一个对象调用另一个像,无非是下面的形式
1.在继承层次中,派生类调用基类的构造函数,这样就创建了一个基类对象
2.在组合中,也就是类A作为类B的一个成员字段,这样就需要初始化类A(调用它的构造函数),才可以使用类型为A的实例
3通过函数返回(返回A),在C++叫做函数对象,C#当然也可以这样,在函数中返回一个类型为A的临时对象

可以采用的办法很多,参阅设计模式中的工厂模式

不知道我说的方法对不对,我是学c++的学生而已。。。

将SqlDataReader构造函数设置为private,这样就不能通过调用它的构造函数来显式生成对象。而在SqlCommand类的实现中,或者用友元,或者其他类似的方法,在ExecuteReader()这个方法中调用SqlDataReader构造函数,并且返回这个对象的引用。

查看vs对象浏览器可以看到SqlDataReader未定义构造函数,而其继承自三个接口IDataReader、IDataRecord、IDisposable和一个类DbDataReader,父类DbDataReader是定义了构造函数的,因此ExecuteReader()返回的应该是DbDataReader对象,被强制转换成了SqlDataReader

可以设一个抽象类A。。抽象类是没办法实例化的,,再写一个类B继承A;;

但一个对象的方法就是返回这个抽象类A的,,其实里面可以返回new B();

工厂模式