C#基础----方法与构造函数

我有个问题!   如果我有一段相同的代码   需要在三个不同的地方去执行, 你会怎么做?

答案一: 复制成三份,粘贴到这三个需要执行的地方?

答案二:  把这一部分公共的代码提取出来    在这三个地方直接调用?

如果是我   那我肯定选择第二种 !!!   那你呢

定义的方法的好处

a. 减少代码的冗余. 只需要些1次, 随处调用.
                        b. 修改维护方便, 方法中的代码只要1改,所有调用这个方法的地方都会改.
                        c. 隐蔽代码的实现.
                          对于调用者而言. 无需关心方法的内部如何实现. 只需要关心这个方法我调用了以后可以实现什么功能

方法的定义:

访问修饰符  (static)   方法返回值   方法名称(参数)

{

//方法返回值是void   那么表示不用返回数据   否则  需要使用return关键字返回数据

}

 public class Person
    {

        /// <summary>
        /// 访问修饰符:public
        /// void:表示没有返回值
        /// 同时该方法也没有参数
        /// </summary>
        public void SayHi()
        {
            Console.WriteLine("Hi,大家好!");
        }

        /// <summary>
        /// 访问修饰符:public
        /// 返回值数据类型:int
        /// 参数两枚    one 和two
        /// </summary>
        /// <param name="one"></param>
        /// <param name="two"></param>
        /// <returns></returns>

        public int  Sum(int one, int two)
        {
            int sum = 0;
            sum = one + two;
            return sum;
        }

    }

下面  咱再看看方法的调用

 class Program
    {

        static void Main(string[] args)
        {
            Person person = new Person();

            //调用无参数的方法
            person.SayHi();

            //调用有参数的方法 首先方法需要两个参数   那么10就会赋值给one, 12就会赋值给two   最后方法有一个返回值 我们定义了一个变量result来接受

            int result = person.Sum(10, 12);

            //输出result的值
            Console.WriteLine("计算的结果是="+result);

            Console.ReadKey();
        }

    }

最后 我们看看执行的结果

哈哈  以上就是方法的简单使用啦

2.0构造函数

说到构造函数, 这货其实也是一个特殊的方法而已     方法需要我们来调用!  但是这货却不需要程序员手动来调用   构造函数在创建对象的时候会自动被调用的

public class Person
    {
        public int Age { get; set; }

        public string Name { get; set; }
        public bool Gender { get; set; }

        /// <summary>
        /// 默认的无参(无参数)的构造函数
        /// </summary>
        public Person() { }

        /// <summary>
        /// 有参的构造函数
        /// </summary>
        /// <param name="name"></param>
        /// <param name="age"></param>
        /// <param name="sex"></param>
        public Person(string name, int age, bool sex)
        {
            this.Age = age;
            this.Name=name;
            this.Gender=sex;
        }
    }
  1. 构造函数是1个特殊的方法.
             a. 语法特殊
                访问修饰符绝大多数情况下直接是pubic.
                构造函数没有返回值. void都不要写.
                构造函数的名称必须与所在的类名相同.
             b. 执行时机
                1).  构造方法不能被程序员手动的调用.
                Person d = new Person();
                创建对象的小括弧.有什么作用.
                调用对象的构造方法.
                2). 构造函数的执行时机
                在创建对象的时候,自动的被new关键字调用.
                只有当new关键字的四件事情都做完了的情况下 才算创建对象成功.
             c. 在创建对象的时候,必须要调用对象的构造函数.

    2. 构造函数可以带参数.
             如果构造函数带了参数,那么在创建对象的时候 必须要给构造函数的参数传值.
             把实参的值直接的写在创建对象的小括弧之中.

    3. 构造函数也是可以重载的.
             也就是说可以有多个构造函数, 那么在创建对象的时候,可以调用任意的1个构造函数来完成对象的创建.
             如何确定调用那1个构造函数呢?
             在创建对象的小括弧后面,通过实参的个数和类型自动匹配,匹配到那1个构造函数就调用那1个,匹配不到就报错.

     4. 构造函数的作用
             a. 构造函数的最大的特点: 在创建对象的同时自动执行.
             b. 什么时候使用构造函数:
                如果有段代码,我们希望在创建对象的同时就自动执行, 那么我们就可以把这段代码放在构造函数中.
                虽然这样,但是我们建议: 不要在构造函数写1些特别耗性能和时间的代码.
                因为构造函数中的代码执行完毕之后.才算对象创建完毕. 如果构造函数的执行要花很多时间,就会影响创建对象的效率.

                大多数程序员使用构造函数来初始化对象的属性的值.
                构造函数的参数写上对象的属性的类型
                然后在方法中将传入的参数赋值给对应的属性.
                这就可以达到强制的效果.让用户在创建对象的时候 必须为属性赋值.

     5. 当我们没有为类写任意的构造函数的时候. 编译器在编译的时刻会自动的为这个类
             生成1个无参数的空方法体的构造函数.我们就把编译器自动生产的这个构造函数叫做 隐式构造函数
             所以,当我们没有为类写任意的构造函数的时候,我们仍然可以调用无参数的构造函数来创建对象.

             如果我们为类写了任意的1个构造函数,那么编译器在编译的时候 就不会再为我们生成那个无参数的构造函数了.
             如果我们就是要调用无参数的构造函数 那么就写1个就可以了.

     6. 构造函数不能被程序员手动的调用:
             a. 在普通的方法当中,不能调用构造函数.  但是在构造函数中可以调用普通的方法.
             b. 构造函数之间能否相互调用.
                构造函数之间是可以相互调用的.
                语法:
                在构造函数的小括弧的后面 写1个冒号, 再写1个this,再写1对小括弧. 小括弧中根据实参匹配目标构造函数.
                public Person(string name,int age)
                  :this()
                {
                }
                public Person()
                {
                }
                执行顺序: 如果A构造函数调用了B构造函数. 如果在创建对象的时候调用的是A构造函数.
                先调用A构造函数.
                再调用B构造函数
                再执行B构造函数
               再执行A构造函数.

            c. 之所以要调用构造函数,是因为我们想重用构造函数中的代码.
               在调用另外的1个构造函数并给其串参数的的时候,参数我们可以直接给1数据.
               在传递参数的时候,可以使用本构造函数的参数.

               构造函数不可以同时调用多个构造函数,但是可以1个调1个.
时间: 2024-10-11 00:38:44

C#基础----方法与构造函数的相关文章

一、考虑使用静态工厂方法替代构造函数

1.何为静态工厂方法 静态工厂方法就是一个返回类实例的静态方法.比如Boolean的valueof方法: 1 public static final Boolean TRUE = new Boolean(true); 2 public static final Boolean FALSE = new Boolean(false); 3 4 public static Boolean valueOf(boolean b) { 5 return (b ? TRUE : FALSE); 6 } 2.为

python魔法方法、构造函数、序列与映射、迭代器、生成器

在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法".比如我们接触最多的__init__,魔法方法也就是具有特殊功能的方法. 构造函数 构造函数不同于普通方法,将在对象创建后自动调用它们.也就是在对象创建完成后,自动会调用__init__方法来初始化. 创建一个构造方法 构造方法传参 >>> class FooBar: def __init__(self,value=42): #默认参数 self.somevar = value >>&g

C# 验证码识别基础方法及源码

原文:C# 验证码识别基础方法及源码 先说说写这个的背景 最近有朋友在搞一个东西,已经做的挺不错了,最后想再完美一点,于是乎就提议把这种验证码给K.O.了,于是乎就K.O.了这个验证码.达到单个图片识别时间小于200ms,500个样本人工统计正确率为95%.由于本人没有相关经验,是摸着石头过河.本着经验分享的精神,分享一下整个分析的思路.在各位大神面前献丑了. 再看看部分识别结果 是不是看着很眼熟? 处理第一步 去背景噪音和二值化 对于这一块,考虑了几种方法. 方法一:统计图片颜色分布,颜色占有

EF 底层基础方法

1 using System; 2 using System.Data; 3 using System.Collections.Generic; 4 using System.Data.Entity; 5 using System.Linq; 6 using System.Linq.Expressions; 7 using System.Text; 8 using System.Threading.Tasks; 9 using SchoolDAL.Context; 10 using School

定义在构造函数内部的方法,会在它的每一个实例上都克隆这个方法;定义在构造函数的prototype属性上的方法会让它的所有示例都共享这个方法,但是不会在每个实例的内部重新定义这个方法. 如果我们的应用需要创建很多新的对象,并且这些对象还有许多的方法,为了节省内存,我们建议把这些方法都定义在构造函数的prototype属性上。

定义在构造函数内部的方法,会在它的每一个实例上都克隆这个方法;定义在构造函数的prototype属性上的方法会让它的所有示例都共享这个方法,但是不会在每个实例的内部重新定义这个方法. 如果我们的应用需要创建很多新的对象,并且这些对象还有许多的方法,为了节省内存,我们建议把这些方法都定义在构造函数的prototype属性上.当然,在某些情况下,我们需要将某些方法定义在构造函数中,这种情况一般是因为我们需要访问构造函数内部的私有变量.

C#验证码识别基础方法实例分析

本文实例讲述了C#验证码识别基础方法,是非常实用的技巧.分享给大家供大家参考.具体方法分析如下: 背景 最近有朋友在搞一个东西,已经做的挺不错了,最后想再完美一点,于是乎就提议把这种验证码给K.O.了,于是乎就K.O.了这个验证码.达到单个图片识别时间小于200ms,500个样本人工统计正确率为95%.由于本人没有相关经验,是摸着石头过河.本着经验分享的精神,分享一下整个分析的思路.在各位大神面前献丑了. 再来看看部分识别结果如下图所示: 这里是不是看着很眼熟?下面再来具体分析一下. 处理第一步

JavaScript中的工厂方法、构造函数与class

JavaScript中的工厂方法.构造函数与class 本文转载自:众成翻译 译者:谢于中 链接:http://www.zcfy.cc/article/1129 原文:https://medium.com/javascript-scene/javascript-factory-functions-vs-constructor-functions-vs-classes-2f22ceddf33e#.wby148xu6 在ES6出现之前,人们常常疑惑JavaScript中的工厂模式和构造函数模式到底有

scala学习手记12 - 字段、方法和构造函数

在上一节创建了一个scala类,如果没有更多的方法,scala类的定义还可以更简单一些,看一下下面这个CreditCard类的定义: class CreditCard(val number: Int, var creditLimit: Int) 是的,只用一行就完成了类的定义,连大括号都不需要. 因为scala也是运行在JVM上,可以考虑以java的方式来看看编译后的类文件.查看的方式还是比较灵活的,可以使用JD-GUI,也可以使用javap –private CreditCard命令,还有一个

C++学习基础六——复制构造函数和赋值操作符

1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作符:返回值是本类的引用类型,参数类型是所属类的类型,且参数是一个const引用. 作用与复制构造函数相同. 其声明如下: 1 Sales_item& operator=(const Sales_item& rig); 3.什么情况下需要我们自己实现复制构造函数和赋值操作符? 一般情况下,C++