您的位置:首页 > 其它

【基础知识】——构造函数

2016-04-24 17:47 246 查看
什么是构造函数

与一般方法的区别

构造函数种类

总结

  构造函数在学习C#的时候就略有接触,可是那个时候之间简单略知一二。在学习JS的时候再次接触到这个东西,听的云里雾里的所以尝试着总结一下。本文主要详细的总结一下构造函数是什么,与一般方法的区别,有几种,为什么要用?

什么是构造函数

构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。

例如:

class Program
{
public class ProgramTest
{
int j;
string strj;
public ProgramTest(int i)
{
j = 2;
Console.WriteLine("I am ProgramTest,i={0},j={1}", i, j);
}
public ProgramTest(string str)
{
strj = "test";
Console.WriteLine("I am ProgramTest,str={0},strj={1}", str, strj);
}
static void Main(string[] args)
{
ProgramTest pt = new ProgramTest("j");
ProgramTest pt1 = new ProgramTest(1);
Console.Read();
}
}
}


与一般方法的区别

1.构造函数的命名必须和类名完全相同;而一般方法则不能和类名相同。

2.构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰.这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择.而其他方法都有返回值.即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的。

3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用。

4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,用EA生成框架的时候每个类会提供一个默认的构造函数.此默认构造函数是不带参数的.而一般方法不存在这一特点

简单的来说构造函数就是用来创建对象用的,说的专业些叫实例化对象。

构造函数种类

1、 实例构造函数

使用new表达式创建某个类的对象时,会使用实例构造函数创建和初始化所有实例成员变量。可以有参数也可以没有参数。具体的例子见上。

2、 私有构造函数

私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。 如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。



public class Test
{
private  Test()
{
Console.WriteLine("I am Test");
}
}
public class ProgramTest
{
int j;
private ProgramTest()
{
j = 3;
Console.WriteLine("I am ProgramTest 默认构造函数,j={0}", j);
}
static void Main(string[] args)
{
Test t = new Test();
ProgramTest pt1 = new ProgramTest();
Console.Read();
}
}
结果:这时你会发现编译器会提示你,你无法创建Test的实例
(即使你在Test类中添加一个静态成员,结果依然会提示因为该构造函数受其保护级别的限制而不可访问)


若只在自己类私有类

public class ProgramTest
{
int j;
private ProgramTest()
{
j = 3;
Console.WriteLine("I am ProgramTest 默认构造函数,j={0}", j);
}
static void Main(string[] args)
{
ProgramTest pt1 = new ProgramTest();
Console.Read();
}
}
结果:I am ProgranmTest 默认构造函数,j=3


注意,如果您不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数。但是,通常显式地使用private修饰符来清楚地表明该类不能被实例化。

3、 静态构造函数

  静态构造函数用来初始化静态变量,这个构造函数是属于类的,而不是属于哪个实例的。就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。

{
static int i;
static  Test()
{
i = 1;
Console.WriteLine("I am Test 默认构造函数 i={0}", i);
}
}
public class ProgramTest
{
static void Main(string[] args)
{
Test t1 = new Test();
Console.Read();
}
}
结果为:I am Test 默认构造函数 i=1


静态构造函数的特点

1.静态构造函数既没有访问修饰符,也没有参数。

2.在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类,也就是无法直接调用静态构造函数,也无法控制什么时候执行静态构造函数。

3.一个类只能有一个静态构造函数,最多只能运行一次。

4.静态构造函数不可以被继承。

5.如果没有静态构造函数,而类中的静态成员有初始值,那么编译器会自动生成默认的静态构造函数。

总结

  先知道构造函数是什么,与普通的区别是什么,还有一些类别,目前关于构造函数的理解,这仅仅是一些皮毛,在Javascript视频有很多的关于构造函数的内容,自己的理解也不是很详细,所以会在后面的博客内容中继续总结。构造函数是面向对象学习的基础,所以在学习过程中,慢慢理解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: