基础记录

C#读书笔记 此书为《C#入门经典(C#6.0&Visual Studio 2015)(第七版)》,购于2016年底 购买此书是因为工作需要接触部分C#代码,而那时我对面向对象编程的概念认识尚浅,工作接触的代码又比较庞大,于是寄希望于此书,希望能快速上手C#,了解基本的知识,避免闹笑话。 刚拿到这本书时,我急于求成,加上书前半部分的内容也很入门(读书时跳过了),约2、3周便利用闲暇时 阅读详情

1.接受任意多个参数示例

    static int SumVals(params int [] Vals) {....}

    int valSum=SumVals(1,2,4,5,8);

2.ref关键字的使用(如下myNumber声明为const、或未赋值(如int myNumber)声明为ref非法)

     static void ShowDouble(ref int val)

     { val *= 2; Console.WriteLine("val doubled = {0}",val);}

    调用:

       int myNumber=5;

      Console.WriteLine("myNumber = {0}",myNumber);

      ShowDouble(ref myNumber);  //函数

      Console.WriteLine("myNumber = {0}",myNumber);

   结果:myNumber=5; val doubled=10; myNumber=10;

3.out关键字的使用(用法与ref基本相同,区别:out参数引用需声明为未赋值(如int myNumber))

4.static关键字定义的变量在同一空间中的任何函数都可使用

5.结构函数(简化代码)

     struct customerName

    {

       public string firstName,LastName;

       public string Name()

       {

         return fristName+" "+lastName;

       }

    }

    customerName=myCustomerName;

    myCustomerName.firstName="Will";

    myCustomerName.lastName="Smith";

    Console.WriteLine(myCustomerName.Name());

6.委托的运用(使用范围事件、列表排序有几个不同的方法)

  Class Program

  {

      delegate double ProccessDelegate(double param1,double param2);

      static double Multiply(double param1,double param2)

      { return param1* param2; }

 

      stattic double Divide(double param1,double param2)

      { return param1/param2; }

 

      static void Main(string[] args)

       {

          ProccessDelegate process;

          Console.Write("Enter 2 numbers separated with a comma:");

          string input=Console.ReadLine();

          int commaPos=input.Indexof(','); //获取","所在位置

          double param1=Convert.ToDouble(input.SubString(0,commaPos-1));

          double param2=Convert.ToDouble(input.SubString(commaPos+1,input.Length-commaPos-1));

 

          Console.WriteLine("Enter M to Multiply or D to Divide:");

          string input=Console.ReadLine();

          if (input="M")

                proccess=new ProcessDelegate(Multiply);   //可简写为:proccess=Multiply;

           else

               proccess=new ProcessDelegate(Divide);

         Console.WriteLine("Result:{0}",proccess(param1,param2));

         Console.ReadLine();

       }

  }

 7.调试的两种方式

     VS(可修改断点属性)和VCE, 可使用checked关键字强制抛出异常,对于投入生产的应用程序应把调试写入日志文件。

    调试语句:Debug.write(),Trace.write();Debug.writeIf()

8.析构函数

     如果在删除对象实例前,需要完成一些重要的操作,就应提供特定的析构函数。

9.接口

    方法和属性组合封装特定功能的一个集合,接口不能单独存在。在发布接口后最好不要修改,应创建新的进行扩展,如新版本X2。

   可删除的对象是,IDisposable接口中的Dispose()方法using:

  <ClassName> <VariableName>=new <ClassName>;   using(<VariableName>){ ... }

10.继承

    C#中的 对象仅能直接派生一个基类,基类也有自己的基类。基类的成员可以是虚拟的,派生类需要重写。internal关键字的类不能继承基类和不能被继承。

    类(seal)可以是密封的,密封的类不能用作基类,所以没有派生类。

   注:接口可继承多个接口,类也可继承多个接口,但只能继承一个基类。

 11.多态性

     继承的一个结果是派生基类的类在方法和属性上有一定的重叠,因此,可以使用相同的语法处理从同一个基类实例化的对象。

     例:基类Animal有一个EatFood()方法,则派生于它的Cow和Chicken调用这方法,语法:

           Cow myCow=new Cow();  Chicken myChicken=new Chicken();

           myCow.EatFood();   myChick.EatFood();

          多态性则更推进一步,可把某个派生类型的变量赋给基本类型的变量:

           Animal myAnimal=myCow;

        不需要的进行强制类型转换,就可通过这个变量调用基类:

           myAnimal.EatFood();

      可把基类转换为派生变量,调用派生类的方法:

         Cow myNewCow=(Cow)myAnimal;

          myNewCow.Moo();

     多态性是一种极有效的技巧,其使用的代码最少,只要子类和孙子类在继承层次结构中有一个相同的类,就可使用同样的方式利用多态性。

12. 接口的多态性

      接口不能实例化,但可建立接口变量,利用变量访问接口提供的方法和属性。

      例:不使用基类Animal提供的方法,把方法放在IConsume上

          Cow myCow=new Cow();    Chicken myChicken=new myChicken();

          IConsume consumeInterface;

          consumeInterface=myCow;        consumeInterface.EatFood();

          consumeInterface=myChicken;  consumeInterface.EatFood();

13.windows应用程序中的OOP

     1.事件的调用(单击button创建一个新的button,再单击此button改变文本):

       private void button1_Click(object sender,System.EventArgs e)

      {

              ((Button)sender).Text="Clicked!";      //多态性,object

              Button newButton=new Button(); //新建一个button

              newButton.Text="New Button";

              newButton.Click+=new EventHander(newButton_Click);  //新建的button调用的单击处理事件(重载处理注册为click事件)

              Controls.add(newButton);

      }

     private void newButton_Click(object sender,System.EventArgs e)

     {

            ((Button)sender).Text="new Clicked!";

     }

   2.类和接口的实例运用:

      2.1  为下述类和接口绘制UML图

            >抽象类HotDrink,它有方法Drink()、AddMilk()和AddSugar(),以及属性Milk和Sugar。

            >接口ICup,它有方法Refill()和Wash(),以及属性Color和Volume。

           >派生于HotDrink的类CupOfCoffee支持ICup接口,还有一个属性BeanType。

           >派生于HotDrink的类CupOfTea支持ICup接口,还有一个属性LeafType。

           UML图,属性和方法加分开线就可,^表连线方向,->表实现的接口:

                     HotDrink                                            <Interface>ICup

                        Milk                                                       Color

                      Sugar                                                     Volume

                      Drink()                                                      Refill()

                    AddMilk()                                                  Wash()

                  AddSugar()

                                   ^

CupOfCoffee->ICup        CupOfTea->ICup

  BeanType                      LeafType 

       2.2为一个函数编写代码,接受上述两个杯子对象中的任意一个,作为一个参数,该函数可以为它传送任何杯子对象调用AddMilk()、Drink()、Wash()方法。

           static void ManipulateDrink(HotDrink drink)

           {

                 drink.AddMilk();

                 drink.Drink();

                 ICup cupinterface=(ICup)drink;  //很危险,可给这个函数传递其它类(类不支持ICup接口)

                 cupinterface.wash();

            }

        改为:

           static void ManipulateDrink(HotDrink drink)

           {

                drink.AddMilk();

                drink.Drink();

                if (drink is ICup)  //检查类drink是否支持ICup接口

                {

                     ICup cupInterface=drink as ICup;

                     cupInterface.wash();

                } 

           }

14.利用多态时,GetType()和typeof(C#运算符,把类名转换为System.Type对象)

    例:当比较类名时

       MyComplexClasss myObj=new MyComplexClasss(); 

       if ( myObj.GetType()==typeof(MyComplexClass) ) { ... }

15.构造函数和析构函数

       在类的构造函数中执行多个任务,把这些代码放在一个地方是非常方便的。

       public class MyBaseClass

       {

            public MyBaseClass() {  }

            public MyBaseClass( int i ) {  }                   

        }

 

       public class MyDerivedClass:MyBaseClass

       {

           public MyDerivedClass() { }

           public MyDerivedClass( int i ) { }

           public MyDerivedClass( int i,int j ) { } 

       }

      1.无论在派生类上使用什么构造函数(默认的构造函数或非默认的构造函数),除非明确指定否则就使用基类的默认构造关於生命的,如执行上面代码:

          MyDerivedClass myObj=new MyDerivdClass(4);

         执行顺序如下:

           1.1.执行System.Object.Object()构造函数

           1.2.执行MyBaseClass.MyBaseClass()构造函数

           1.3.执行MyDerivedClass.MyDerivedClass(int i)构造函数

      2.若要执行MyBaseClass(int i)和MyDerivedClass(int i,int j )构造函数,则实现如下:

            public class MyDerivedClass:MyBaseClass

            {

                 public MyDerivedClass():this(5,6)          //指定在执行MyDerivedClass()前先执行MyDerivedClass(int i,int j)

                 {   }

                public MyDerivedClass(int i) { }

                public MyDerivedClass(int i,int j):base(i)  //指定执行基类中的MyBaseClass(int i)构造函数,就不会执行MyBaseClass()构造函数

                 {   }

            }

         执行顺序如下:

             2.1执行System.Object.Object()构造函数

             2.2执行MyBaseClass.MyBaseClass(int i)构造函数

             2.3执行MyDerivedClass.MyDerivedClass(int i,int j)构造函数

             2.4执行MyDerivedClass.MyDerivedClass()构造函数

       3.如下构造函数无效,成了无限循环

             public class MyDerivedClass:MyBaseClass

              {

                 public MyDerivedClass():this(5) { }

                 public MyDerivedClass(int i):this() { }

              }

16.抽象类与接口            

        抽象类主要是用作对象系列的基类,共享某些主要特性,例如,共同的目的和结构。则主要用于类,这些类在水平上有所不同,但仍可以完成某些相同的任务。

       类与结构的主要区别是类是引用类型,结构是值类型。

       浅度复制与深度复制,(复制值与引用的方式)

17.如何定义不能创建的类?把它定义为静态类,或者将其所有构造函数定义为私有。

    不能创建的类可以通过它们拥有的静态成员来使用,实际上,可以通过这些静态成员来访问它的实例。如下所示:

      class CreateMe()

      {

              private CreateMe() { }

              static public CreateMe GetCreateMe() { return new CreateMe(); }

      }这里,公共构造函数可以访问私有构造函数,因为它在同一个类的定义中。

18..NET中字段的命名方法

        public int MyInt;

        private int myInt;

19.类的关键字:virtual、abstract、override、extern(方法放在其他地方)、new关键字(隐藏方法、可以隐藏接口的基类成员)

20.隐藏成员(new)

      public class MyBaseClass

       {

          public void DoSomething() { }

       }

      public class MyDerivedClass:MyBaseClass

       {

         new public void DoSomething() { }

       }

21.重写成员(virtual)

       public class MyBaseClass

      {

          public virtual void DoSomething() { Console.WriteLine("Base imp"); }

      }

      public class MyDerviedClass:MyBaseClass

      {

          pubic override void DoSomething() { Console.WriteLine("Dervied imp");}

      }

      MyDerivedClass myObj=new MyDerivedClass();

      MyBaseClass myBaseObj=myObj;

      myBaseObj.DoSomething();

      执行结果为:Derived imp 

22.隐藏基类的方法 (new)  :(接口中隐藏的基接口也使用new)

     基类如上

     public class MyDerivedClass:MyBaseClass

     {

           new public void DoSomething() { Console.WriteLine("Dervied imp"); }

     }

    执行结果:Base imp

23.调用重写或隐藏的基类方法

     要对派生类的用户隐藏继承的公共成员,但仍能在类中访问其功能。

     要给继承的虚拟成员添加实现代码,而不简单的用重写的新执行代码实现它。

    public class MyBaseClass

    {

        public virtual void DoSomething() { }

    }

    public class MyDerviedClass:MyBaseClass

     {

          public override void DoSomething()

          {

              //Derived implementation

              base.DoSomething();

            //More implementation

          }

     }

24.部分类(partial):部分类的任何参数都不能是out参数,但可以是ref参数; 部分方法也不能使用virtua、abstract、override、new、sealed、extern修饰符。

   24.1 注意:应用于部分类的结果是也会应用于整个类。

           public partial  class MyClass:IMyInterface1 { ... }

           public partial class MyClass:IMyInterface2  { ... }

           结果等同于:

           public class MyClass:IMyInterface1,IMyInterface2{ ... }

   24.2partial部分(部分方法在编译代码时非常重要)

           public partial class MyClass

           {

              partial void DoSomethingElse();

              public void DoSomething()

              {

                  Console.WriteLine("DoSomething() Execution Started.");

                   DoSomethingElse();

                  Console.WriteLine("DoSomething() Execution Finished.");

              }

            }

           public partial class MyClass

           {

              partial void DoSomethingElse()

             {

                 Console.WriteLine("DoSomethingElse() Called.");

              }

           }

       调用DoSomething(),执行结果如下:

            DoSomething() Execution Started.

            DoSomethingElse() Called. 

            DoSomething() Execution Finished.

 25.第10章习题5洗牌功能键需要处理

JS基础-尚硅谷-添加删除记录练习-视频p103-105 视频链接: JS基础-尚硅谷视频p105 基础版本: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>添加删除记录练习</title> <script type="text/javascript"> /** * 删除tr的响应函数 */ function delA(){ /** * 点击超链接之后 超链接会 阅读详情

相关推荐

一种解决STM32多串口同时收发的方法

在做项目中,遇到了同时调用串口通信时程序崩溃的问题,在项目中,串口1用作调试串口,串口2用作MQTT通信串口,串口3用作下位机通信串口, 串口1重定向以后,用库函数自带的printf函数打印字符串 串口2使用自己写的u2_printf函数,即va_list这套变参宏定义后使用vsprintf函数打印字符串 串口3刚开始使用串口2一样的打印方式,程序在调试调用到串口3打印函数时直接崩溃,后续将串口3改用dma转存输出,仍然无法正常调用 多次研究以后,采用三个串口都使用重定向后的库函数自带的printf

Zxp0605的博客 8796

对“OOP一点小题,请前辈赐教”的求助,试着做一下

以下是今天在博客见到的一篇文章。摘其部分试着做一下,如果有误,请指出不要笑话! ----------------------------------------------------------------------------- 4. 绘制一个UML图,其中包含下述类和接口: 抽象类HotDrink,它有方法Drink()、AddMilk()和AddSugar(),以及属性Mi...

weixin_30491641的博客 418

模拟量传输4-20ma电流

大家可能会非常熟悉RS232,RS485,CAN等工业上常用的总线,他们都是传输数字信号的方式。那么,我们用什么方式来传输模拟信号呢?工业上普遍需要测量各类非电物理量,例如温度、压力、速度、角度等,这些都需要转换成模拟量电信号才能传输到几百米外的控制室或显示设备上。工业上最广泛采用的是用4~20mA电流来传输模拟量。 采用电流信号的原因是不容易受干扰,因为工业现场的噪声电压的幅度可能达到数V,但是噪声的功率很弱,所以噪声电流通常小于nA级别,因此给4-20mA传输带来的误差非常小;电流源内阻趋于无穷.

tangdongming的博客 1万+

UML图,时序图

类与类,继承关系:实线空心箭头指向父 类与接口,实现关系:虚线空心箭头指向接口 类与类,关联关系:一个类是另一个类的属性,实线箭头指向属性类。 类与类,聚合关系:整体和部分的关系,是特殊的关联关系,实线空心菱形指向整体 类与类,组合关系:特殊的聚合关系,整体的声明周期决定部分的生命周期,部分是依赖在整体上面的。例如:人和四肢的关系。 实线实心菱形指向整体。 类与类,依赖关系:是所有关系中最弱的关系,这种关系通常体现在类和局部变量之间的关系,虚线箭头指向类 时序图: 实线箭头:调用方法 虚线箭头:

weixin_45613170的博客 2642

FreeRTOS-Plus-CLI使用笔记

FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置

ApexYuan 6962

数字IC后端PPA优化实战:Timing一致性策略与Module Region布局技巧

本文深入探讨了数字IC后端设计中的PPA优化实战,重点解析了Timing一致性问题及其解决方案。通过调整Clock Uncertainty、Timing Derate和RC Scale Factor等关键参数,使Innovus等PR工具的分析结果更接近PrimeTime签核结果。同时,文章详细介绍了Module Region布局技巧,通过为关键模块划定物理区域,优化单元摆放,有效减少线延迟,从而协同提升时序收敛效率与设计可预测性。

weixin_29218963的博客 202

kafka用C#实现生产者(Producer)和消费者(Consumer)

kafka用C#实现生产者(Producer)和消费者(Consumer) 生产者 using Confluent.Kafka; static void Main(string[] args) { Console.WriteLine("请输入消息内容"); using (var producer = new KafkaProducer()) { while (true) { string message = Cons

frank技术经历 4321

VCL for PHP,Konopka Signature VCL Controls (Raize Components 6.2.3) for Delphi 10.4

The Raize Components suite includes a variety of interface design tools for Delphi programming language and C ++ Builder, which includes over 125 VCL controls and over 100 different tools for creating...

weixin_42137539的博客 851

c#学习笔记五 面向对象编程的基本概念 接口 继承和多态

一、接口 1.定义 接口是把公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合。定义了接口后就可以在类中实现它,这样类就可以支持接口所指定的所有属性和成员。 2.注意 ①接口不能单独存在,不能像实例化一个类那样实例化接口。 ②接口不能包含实现其成员的任何代码,只能定义成员本身。实现过程必须在实现接口的类中完成。 3.特性 一个类可以支持多个接口,多个类可以支持相同的接口。

曾霞的博客 596

基于通义千问2.5-7B-Instruct的技术深度解析

通义千问2.5-7B-Instruct是一个基于Transformer架构的大型语言模型,具有70亿参数。它通过自注意力机制和前馈神经网络处理输入序列,能够捕捉长距离依赖关系,适用于多种NLP任务。微调是指在预训练模型的基础上,使用特定任务的数据进行进一步训练,以使模型更好地适应特定任务。微调可以显著提高模型在特定任务上的性能。通义千问2.5-7B-Instruct是一个强大的语言模型,适用于多种NLP任务。通过深入理解其架构、微调方法和核心代码,可以更好地应用于实际场景。

zhangjiaofa的专栏 1567

RV1126笔记二十七:MetaRTC6移植

MetaRTC6移植

6038

记录一下小白0基础自学java的过程

0基础小白,按照 cs61b 课程的顺序,自学java,记录一下每天的历程与收获。

zac654的博客 217

SAP会计凭证导入ABAP开发模板+注意点—附带源码

开发并不仅仅只要考虑实现的功能,只实现功能的是程序,考虑到使用场景的是工程。使用bapi校验创建会计凭证的数据,报错和参数和正式创建一致。用途,防止产生错误的凭证,即使财务凭证可以冲销。正式创建会计凭证。隐藏的坑。

小九啥也不会 1232

记录php的基础功能片断

记录php的基础功能片断 以后慢慢更新。

202

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

BBT,基础体温(Basal body temperature)记录工具

BBT 基础体温(Basal body temperature)记录工具,可以快捷记录体温,可以生成图表和大图(供医生查看)。 下载到相册中的图表 应用下载体验: Download BBT_v1.0 扫描二维码下载: 源码传送门

qq1073273116的博客 814

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

开始记录Linux的基础学习

从2021年9月30日开始

weixin_46385851的博客 97

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【stata】基础指令——学习教程全记录(01)

开一文记录和总结stata的学习,不断更新中~ 拿到一个数据集,首先要全局了解一下这个数据集的情况: 【describe】查看这个数据集的简要介绍,包括了样本数量(obs:)、变量数量(vars:)、大小(size:)、以及每个标量的简要介绍。 【describe[varlist]】:可以单独选择某个变量查看,[]表示可选。 【describe,short】:只看整个数据集的总体概况,...

HR_tigerking的博客 1万+

oracle 基础语法复习记录

掌握SELECTINSERTUPDATEDELETE等基本操作。熟悉WHEREGROUP BYORDER BYHAVING等子句。学习INNER JOINLEFT JOINRIGHT JOIN等连接方式。熟悉SUMCOUNTAVGMINMAX等函数的使用学习如何在SELECTFROMWHERE中使用子查询。理解相关子查询和非相关子查询的区别。学习RANK()LEAD()LAG()等窗口函数。掌握OVER子句的使用,尤其是和ORDER BY。学习使用WITH。

舒婷(Zoe) 1017

python基础知识_在python中记录基础知识

python基础知识Logging is the act of recording information about the current state of execution. It’s typically done for two purposes:记录是记录有关当前执行状态的信息的动作。 通常有两个目的: Debugging: To enable the developer to nar...

weixin_26721705的博客 336

python基础语法记录

python基础语法以及基础编程记录: 隔列打印星星: #单个循环打印星星: i = 0 while i < 100: #此处执行打印星星的命令: if i % 2 == 0: print("☆", end = " ") else: print("★", end = " ") #此处执行换行的命令: if i % 10 == 9: print() i += 1 #双循环打印小星星偷懒之一: j = 0 while j < 5: i = 0 while i <

Argonum的博客 238

JS基础-添加删除记录(复杂版)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-U...

linqunbin的博客 328

JS基础-添加删除记录(简单版)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-U...

linqunbin的博客 346

flask基础知识记录

本文记录下flask框架的一些基础知识与内容 文章目录flask框架概述 flask框架概述

wh柒八九的博客 345

HUD 基础知识 学习记录整理

HUD 基础知识 学习记录整理 去发现同类优质开源项目:https://gitcode.com/ 在此仓库中,我们为您提供了一份关于HUD(Head-Up Display,抬头显示)基础知识的详细学习记录整理。该记录是作者在学习HUD相关知识的过程中,逐步积累、整理而成。内容涵盖HUD的基本原理、技术分类、应用领域等多个方面,旨在帮助您全面了解HUD技术,为深入研究打下坚实基础。 去发现同类优质...

gitblog_06777的博客 342

python学习记录——基础语法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

qq_45747173的博客 780

CUDA基础教程文档记录

CUDA基础教程文档记录

周同学的博客 2387
上一篇: 设计模式需要理解的原则
下一篇: Windows 2008 / Windows 7 x64: The ‘Microsoft.Jet.OLEDB.4.0′ provider is not registered on the local
CEJ-盐井
博客等级 码龄17年 10粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值