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

  • 什么是构造函数
  • 与一般方法的区别
  • 构造函数种类
  • 总结

  构造函数在学习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视频有很多的关于构造函数的内容,自己的理解也不是很详细,所以会在后面的博客内容中继续总结。构造函数是面向对象学习的基础,所以在学习过程中,慢慢理解。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 31
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandy_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值