C#学习笔记 三

正文共: 2947字
预计阅读时间: 8分钟

写在前面的话 : 编程语言的出现是为了让机器更好的服务人类, 所以越是高级的编程语言人类使用起来就越方便, 随着计算机硬件的发展高级编程终将会被大多数编程人员接受并使用。 但是学习C、汇编等与底层语言会使得编程人员更好的理解编程的原理,这也是一个编程人员的内功心法。

思维导图

在这里插入图片描述

面向对象

( 面向对象就是一切以对象为基础。 面向对象语言都是高级语言,而高级语言未必都是面向对象的。 因为相比面向过程面向对象更符合人类的思维方式。 )
举例理解

注 : 此处参照了一些知乎上的回答,面向对象和面向过程算是计算机的旷世难题

在以前, 我们洗衣服需要 以下流程 :A、盆中倒入洗衣粉 ——> B、 注入清水 ——> C、放入脏衣物 ——> D、 涂上肥皂,用手搓洗 ——> E、 更换清水,洗去清洁残留物 ——> F、 用手拧干水分。 如此大致 6步 然后家庭都要有人掌握一门洗衣服的技能, 这时一个很有想法的人就按照一个标准的洗衣服的流程提出了 “ 洗衣机 ”的设计( 这实际上就是我们 C# 中所通常所定义的类 )。于是有需要的家庭, 例如 :小明家, 就买了一台 “洗衣机”回家用 ( 这就是对象的实例化,对象是具体的, 而类是抽象的 )。 只要 new 洗衣机() 并调用洗衣机中洗衣的方法 传入参数 ( 脏衣服 ,洗衣液 ) 就完成了洗衣服的流程。 而一个 “ 洗衣机 ”类的创造 可以生产出无数的实例 从而解放了无数的家庭妇女。 让她们可以从事更多自己想做的事。

这个实例充分说明了 “ 面向对象 ” 优点:

   > 提高了代码的重用性、灵活性、扩展性

   > 使得代码变得易于维护

个人理解 : 类算是方法、字段、属性等集合, 所以说面向对象编程中一切皆可为对象, 就是把一切功能重复的代码抽象化写入类中重复调用 ( 即 代码重用 )。 灵活性的体现在于我们可以根据需求写功能,在原有基础上进行扩展却不影响其他实例 ( 即 扩展性 )。 我们的实例对象只要调用类中自己所需要的那一部分功能即可。 例如 “ 洗衣机 ” 有快洗、标准、水温度、还有针对不同类型衣物选择洗涤模式。 在面向对象中我们可以打包在一个 “ 洗衣机 ”类里。

专业术语
( 如果以后去面试一点专业术语回答不上就很尴尬了 )

    OOP ( Object Oriented Programming 面向对象的程序设计 ) , 这是一种计算机编程架构。

    OOA ( Object-Oriented Analysis 面向对象分析 ), 一种按照面向对象思想来分析问题的方法。

    OOAD  ( Object Oriented Analysis Design 面向对象分析与设计 ) ,现代软件企业广为采用的一项有效技术。

缺点
性能上对比 “ 面向过程 ” 有所损耗。

核心思想

封装 :封装是一种信息隐蔽技术, 它体现于类的说明, 是对象的重要特性。 封装的目的 在于把对象的设计者和对象者的使用分开, 使用者不必知晓行为实现的细节, 只须用设计者提供的消息来访问该对象。

继承 :继承意味着一个类隐式地将它的直接基类类型的所有成员当作自已的成员, 但基类的实例构造函数、析构函数和静态构造函数除外。 继承具有可传递性。

简单代码示例
class Person
   {
       public void Print()
       { Console.WriteLine("被继承的方法"); }
   }
   class Student : Person
   { }

static void Main(string[] args)
       { 
     Student stu = new Student();
           stu.Print();
           Console.ReadKey();
       }
   }
}

多态 :面向对象的多态性表现在 对象根据所接收的消息而做出动作。 同一消息为不同的对象接受时可产生完全不同的行动。

        主要体现于方法的重载 ( 允许同一类中的多个方法具有相同名称,条件是这些方法具有唯一的签名 )
class Person
   {
       public void Print()
       { Console.WriteLine("被继承的方法"); }
public void Print(int n)
       { Console.WriteLine("被重载的方法"); }
   }
   class Student : Person
   { }

static void Main(string[] args)
       { 
     Student stu = new Student();
           stu.Print();
     stu.Print(1);
           Console.ReadKey();
       }
   }
}

引申 面向过程

概念 : 自顶向下、逐步求精、模块化封装函数主张按功能把软件系统逐步细分,对每个涉及到的功能都进行一次数据处理然后输出。由主函数负责把函数中的所有接口串接起来,程序的实现非常强调达到某功能的算法。每个函数都有唯一的入口和出口。

参数

C# 中定义了 四种 类型的参数

值参数 ( value parameter ) 用于传递输入参数。 一个值参数相当于一个局部变量, 只是它的初始值来自为该形参传递的实参。 对值参数的修改不影响为该形参传递的实参。

引用参数 ( reference parameter ) 用于传递输入和输出参数。 为引用参数传递的实参必须是变量, 并且在方法执行期间, 引用参数与实参变量表示同一存储位置。 引用参数使用 ref 修饰符声明。

输出参数 ( output parameter ) 用于传递输出参数。 对于输出参数来说, 调用方提供的实参的初始值并不重要。 除此之外, 输出参数与引用参数类似。 输出参数是用 out 修饰符声明的。

参数数组 ( parameter array ) 允许向方法传递可变数量的实参。 参数数组使用 params 修饰符声明。 只有方法的最后一个参数才可以是参数数组, 并且参数数组的类型必须是一维数组类型。

        代码示例
class Program
   {
       public const int N= 0; 
       static int Parameter(int n)//定义一个方法让值类型参数+1
       {
           return n++;
       }
       static int RefParameter(ref int n)//定义一个方法让引用参数+1
       {
           return n++;
       }
       static void OutParameter(int n1,out int out1)
       {
           out1 = n1 + 1 ;//输出参数要先初始化赋值才能使用
       }
       static int ArrPatameter(params int[] arr)
       {
           int sum = 0;
           foreach (int i in arr)
           {
               sum = i + sum;
              // Console.WriteLine(i);
           }
           return sum;
       }
       static void Main(string[] args)
       {
           #region 

           int num = 1;

           Parameter(num);
           Console.WriteLine("输出值类型参数的最终值 : {0}", num);

           RefParameter(ref num);
           Console.WriteLine("输出引用参数的最终值   : {0}", num);

           OutParameter(num, out num);
           Console.WriteLine("输出参数的最终值       : {0}", num);

           int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
           ArrPatameter(arr);
           Console.WriteLine("输出数组参数的和       : {0}", ArrPatameter(arr));
           Console.ReadKey();

       }
   }

在学习的吸收转化率中,主动学习远高于被动学习,而主动学习中最高的是教授给他人(90%转化率),希望我所写的能被更多人所接受,一起成长!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38288847/article/details/83869365