年时,北风吹雁雪纷纷,一条秋裤冻上头。冷的连手都懒得动,就随便翻翻书,也没有更新博客,如今年已过,开始投入到正常的工作状态中,趁现在需求还没有来,把C#基础知识梳理一下,其实一直以来就想这样做的,对于程序员来说,手指一点,各种详细的资料就出来了,但并不是自己的,有些基础的点总是隔一段时间就忘记,或者说自己压根就没有真正理解过,不管怎样,好记性不如烂笔头,先写再说,一次整理一部分,慢慢积累起来。

1.C#定义常量的方式  const定义静态常量,申明时需要初始值,一旦申明不可改变。

2.构造函数与类名相同,可重载,可带参数,创建该类对象时,自动调用。在调用其他构造函数的时候 public xx():this()

3.数据类型(装箱: 值类型->引用类型   拆箱:引用类型->值类型)

值类型:int、char、bool、枚举、结构 直接存储在栈里

引用类型:string、数组、类、接口、委托、对象  栈里面存储地址,实际上对象存储在堆里

(PS  队列:先进先出  栈:后进先出)

4. 类型转换

隐式转换(所有情况下成立)

显示转换(部分情况下成立,包括convert在内的强制转换)

5. 引用传递

ref : 有进有出,调用前需要赋初始值

out: 只出不进,调用前不需要赋初始值

为什么要用到引用参数?个人理解:当需要在A方法中处理过的B参数值,但该方法又不返回B参数时,就可以通过引用参数来解决此问题。

  1. class Program
  2. {
  3. //引用传值,最后都会改变原来的值
  4. static void Main(string[] args)
  5. {
  6. Program p = new Program();
  7. int outtemp; //只需定义变量
  8. p.MyOut(out outtemp);
  9. int refbb = ; //必须赋初始值
  10. p.MyRef(ref refbb);
  11. Console.WriteLine(outtemp); // out 5
  12. Console.WriteLine(refbb); // ref 6
  13. Console.ReadKey();
  14. }
  15. public void MyOut(out int a)
  16. {
  17. a = ;
  18. }
  19.  
  20. public void MyRef(ref int b)
  21. {
  22. b = ;
  23. }
  24. }

6.静态和实例成员的区别?

实例成员只能在类的对象实例上使用,静态成员只能通过类定义使用

7.委托是个什么玩意?

关于委托,网上资料一大把,包括学校的教材所写, 基本上都是举语言问候的例子。其实这个例子是完全不适合的,没有任何卵用,甚至起到了副作用

随便摘抄其中千篇一律的某点,使用委托极大增加了扩展性,可维护性,摒弃之前的if/Switch 用法,我就纳闷了,例子和结论完全不沾边,怎么得出的鬼结论。

之前Switch语法,直接传入参数name,然后调用对应的语言问候方法。这里接受到的name是不确定其值的,所以必须要进行一个判断。或者采用继承、实例。

然后语言问候的例子中,直接传入name、问候方法两参数。我就纳闷了你怎么知道要调用这个问候方法?采用委托链?这里实际上是没有任何意义的。

其实真正在项目中用到的委托,多数是结合事件一起用的。

  1. public delegate void myFirstDele(int a, int b); // 定义一个委托类型
  2. class Program
  3. {
  4. //(PS:Calculation 类中是实现传入两参数的加/减运算)
  5. static void Main(string[] args)
  6. {
  7. //委託方法一: 直接將方法賦值給委託變量,再給委託變量賦參數
  8. //myFirstDele add = Calculation.Addcount;
  9. //myFirstDele Substra = Calculation.substract;
  10. //add(10, 10);
  11. //Substra(10, 10);
  12.  
  13. //委託方法二: 写一个中間方法,调用中间方法,将实现的方法当做参数来传递
  14. Calculat(,,Calculation.Addcount);
  15. Calculat(, , Calculation.substract);
  16. Console.ReadKey();
  17. }
  18.  
  19. //中间方法,有一个参数为委托类型
  20. public static void Calculat(int x, int y,myFirstDele myfirstDele)
  21. {
  22. myfirstDele(x,y);
  23. }
  24.  
  25. }

8.面向对象的三大特性: 封装、继承、多态

9.简要谈谈多态?

定义:相同類型的對象調用相同的方法卻表現出不同的行為(不同的子類對象賦值給基類對象,該對象調用各自重寫基類的方法,當然會產生不同的行為)

        类别:编译时的多态(函数的重载) 运行时的多态(重写基类方法)

实际上,多态的应用和继承紧密相关,当不确定具体返回类型(有多个类型)时,只需要返回基类,再将子类对象赋给基类对象,此时,可表达该子类对象

抽象方法、虚方法可通过子类重写父类方法来实现多态

  1. //抽象方法實現多態 (抽象方法必须写在抽象类中)
  2. public abstract class Animal
  3. {
  4. //抽象方法沒有方法體
  5. public abstract void Skil();
  6.  
  7. }
  8.  
  9. public class Cat : Animal
  10. {
  11. public override void Skil()
  12. {
  13. Console.WriteLine("(重写基類方法)我是貓,會抓老鼠");
  14. }
  15. public void Test()
  16. {
  17. Console.WriteLine("我是子類貓中特有的方法");
  18. }
  19. }
  20. //小狗类
  21. public class Dog : Animal
  22. {
  23. public override void Skil()
  24. {
  25. Console.WriteLine("<重写基類方法>我是狗,我会看家护院");
  26. }
  27. }
  28. //麻雀类,除了基类中的技能,还拥有自己独特的飞能力
  29. public class Sparrow:Animal,Interface1
  30. {
  31. public override void Skil()
  32. {
  33. Console.WriteLine("<重写基類方法>我是麻雀,我非常靈活");
  34. }
  35. public void Fly()
  36. {
  37. Console.WriteLine("<接口中方法>麻雀,我能衝上雲霄");
  38. }
  39. }
  40.  
  41. ////虛方法實現多態
  42. //public class Animal
  43. //{
  44. // //虛方法有方法體
  45. // public virtual void Skil() { }
  46. //}

接口亦如此,只是将继承了接口的类对象赋值给接口类,而接口中方法的实现仍然在继承接口的类的方法中

  1. static void Main(string[] args)
  2. {
  3. Poly p = new Poly();
  4. //将子類對象赋值给父类
  5. Animal animal = new Cat();
  6. animal.Skil();
  7. //将继承了接口的类对象赋值给接口类
  8. Interface1 interface1 = new Sparrow();
  9. interface1.Fly();
  10. Console.ReadKey();
  11. }

overrite 和 new 的区别

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. var b = new bird(); //始终表达子类对象
  6. b.M1();
  7.  
  8. animal animal = new bird(); //表达父类对象
  9. animal.M1();
  10. ((bird)animal).M1(); //表达子类对象,new 的访问类型必须是 Public,否则表达的仍是父类对象
  11. Console.ReadLine();
  12. }
  13. }
  14.  
  15. public class animal
  16. {
  17. public virtual void M1()
  18. {
  19. Console.WriteLine("我是动物父类");
  20. }
  21. }
  22.  
  23. public class bird:animal
  24. {
  25. public new void M1()
  26. {
  27. Console.WriteLine("我是鸟,我会飞");
  28. }
  29. }

10.什么接口?有什么作用?

接口是对一组方法的声明进行统一命名,不提供实现,默认访问修饰符为Public,接口的产生源于C#中不允许多重继承

调用接口:隐式,  对应继承单一接口  public 返回类型 方法名( ) {  ...  }

如果某个类中继承了多个具有相同名称、参数的方法,则在实现该接口中的方法时,需用到显示(指明具体来自的接口),注意:实现方法时,默认类型为Private私有,故无须添加访问修饰符。  样式为: 返回类型 接口名.方法名( ){  ... }

11.写一个递归的阶乘

  1. public int Jchen(int n)
  2. {
  3. if (n==)
  4. {
  5. return ;
  6. }
  7. else
  8. {
  9. return Jchen(n-)*n;
  10. }
  11. }

12.写一个简单的冒泡程序( 2 for + 1 foreach )

  1. public void SSort(int [] ints)
  2. {
  3. for (int i = ; i < ints.Length; i++)
  4. {
  5. for (int j = ; j < ints.Length-; j++)
  6. {
  7. int temp;
  8. if (ints[j]>ints[j+])
  9. {
  10. temp = ints[j+];
  11. ints[j + ] = ints[j];
  12. ints[j] = temp;
  13. }
  14. }
  15. }
  16. foreach (var item in ints)
  17. {
  18. Console.WriteLine(item);
  19. }
  20. }

13. 字符串中 string.Empty、null、"" 三者有何区别?

① string.Empty 其值为 ""  ,在堆中分配了长度为0的一空间 . 可调用Tostring() , 与 "" 仅存在语法上的优化区别 , 只是Empty无须经过从字符串池中捞取 "" ,赋值给变量的过程.

② null  栈中存储的地址的指向是不确定的,故在堆中不分配内存空间 . 故不可调用Tostring().

注:对于List<T> 泛型集合,null值不可调用对象的任何属性、方法; New之后可调用.

C#基础知识整理的更多相关文章

  1. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  2. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  3. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

  4. java部分基础知识整理----百度脑图版

    近期发现,通过百度脑图可以很好的归纳总结和整理知识点,本着学习和复习的目的,梳理了一下java部分的知识点,不定期更新,若有不恰之处,请指正,谢谢! 脑图链接如下:java部分基础知识整理----百度 ...

  5. wifi基础知识整理

    转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...

  6. JavaScript基础知识整理

    只整理基础知识中关键技术,旨在系统性的学习和备忘. 1.在 JScript 中 null 和 undefined 的主要区别是 null 的操作象数字 0,而 undefined 的操作象特殊值NaN ...

  7. Oracle ASM 磁盘组基础知识整理(收藏版)

    转至:https://cloud.tencent.com/developer/article/1494403 为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的 ...

  8. Linux基础知识整理

    一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...

  9. Linux系统基础知识整理

    一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...

随机推荐

  1. oc初步画图

    - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextMoveT ...

  2. Vue 通过 Lodash 限制操作频率

    <template> <div id="watch-example"> <p> Ask a yes/no question: <input ...

  3. weblogic学习教程(一)

    一.简介 WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发.集成.部署和管理大型分布式Web ...

  4. CentOS 下安装 Node.js 8.11.3 LTS Version

    Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google Chrome V8 JavaScript引擎,简单说是运行在服务端的 JavaScript.下面我们来演示一下Cen ...

  5. 用python发邮件实例

    发QQ邮件 首先确认发件方是否打开了SMTP服务,去QQ邮箱的设置中查看,如果没有请自行开启. from email.header import Header from email.mime.text ...

  6. Python3学习之路~5.6 shutil & zipfile & tarfile模块

    高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])#将文件内容拷贝到另一个文件中,可以部分内容 shutil.copyfile(s ...

  7. 006-docker-安装-nginx

    1.搜索镜像 docker search nginx 2.拉取合适镜像 docker pull nginx docker images 3.使用镜像 docker run -p 8080:80 --n ...

  8. 每周工作4小时,蒂莫西·费里斯 最理想的工作方式和生活方式,QQ群666243547

    内容简介  · · · · · · <每周工作4小时>是一本从观念到行为,彻底改变你的工作方式和生活方式的书.它既是数字时代的职场励志书和创业指导书,也是新新人类的全球化生存手册和人生哲学 ...

  9. c# 文件或者文件夹改名的最简单方法

    使用cmd命令 ren Process.Start( "cmd", "/C " + "ren f:\\first c code.txt zhou.tx ...

  10. [Shapefile C Library]读写shp图形(C++&.net Wapper)

    ShapeLib的.net Wapper版可以在官网下载到,在WorldWind中也有使用.ORG据说也是使用的ShapeLib实现的shp文件的读写. 官网:http://shapelib.mapt ...