• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#基础知识

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近在求职(现在已经找到工作,但是遇到一些不太熟悉容易忽略的基础知识仍会持续更新),求职免不了面试,面试则免不了对基础知识的提问,而我学习的时候却是从直接上手敲代码开始,基础知识可以说是很薄弱,很多地方知其然不知其所以然,最近只好苦学基础知识,俗话说:好记性不如烂笔头,这里将我学到的东西记录一下,方便日后复习使用,如果能帮助别人的话那是最好了。废话不多说,开始。。。。。。。。。。。。

1、static

static变量有的人说只赋值一次,我觉得不是,static变量可以多次赋值,但是以最后一次赋值为准,并且变量用完后不会消失,直至整个程序退出。例如一个网页,定义了一个static变量,在不同的button事件中可以任意赋值,但是变量存储的永远是最后一次赋的值。如果不重复赋值,那么怎么刷新页面,变量仍然为原来的值,直至服务器关闭。在C#里面还有static构造函数,这样的构造函数只在第一个实例创建的时候执行,之后不会再执行。

而static方法的话就是方法属于类而不是数据类的对象,无需实例化类可直接使用static方法。

2、const与readonly区别

  1)const和readonly变量的值一旦初始化都不能再更改

  2)const变量只能在声明的时候初始化,而readonly变量可以在构造函数里面进行初始化

  3)const常量默认是static的,而readonly则不默认,若要设为static类型,则要显示的声明(如:static readonly int a)

  4)const是编译期静态解析的常量,readonly则是编译期动态解析的常量

  5)const既可以修饰类中的成员,又可以修饰函数体内的局部变量,而readonly只可以用来修饰类中的成员

 3、结构体和类

  以前一直不知道像int、bool这些就是结构体,真是汗颜啊,结构体和类有相似的地方,也有不同的地方

  相同的地方:

    (1)结构体和类都可以继承借口

    (2)结构体和类都可以声明字段、方法、构造函数,只是结构体的构造函数必须有参数,结构体有默认的构造函数,并且不能被重写

  不同的地方:

    (1)结构体有默认的构造函数,可以自己写构造函数,但是必须带有参数,而类可以写无参数的构造函数,很多人都说结构体不能用new初始化,大多都是互相抄袭吧,自己不试就写出来很不负责任的,结构体不管有没有定义含参数的构造函数都可以用new实例化的。

    (2)结构体不能继承结构体,而类可以继承或被继承

    (3)结构体是值类型,而类是应用类型,对应的存在的位置也会不同,结构体存放在内存栈中,而类存在内存堆中

4、接口和抽象类

  其实我个人觉得接口更像是抽象类的升级版,更加抽象了,比抽象类更抽象:)

  相同的地方:

    (1)接口和抽象类均无法实例化,只能被继承

    (2)抽象类和接口均可用实现其的子类替代,即将抽象类或接口指向其子类,前提是子类完全实现了继承的抽象类或接口

    (3)继承他们的子类据需要完全实现他们声明的方法才能实例化(对于抽象类已经实现的方法并不是必需要重写)

  不同的地方:

    (1)一个类可以继承多个接口,但只能继承一个抽象类

    (2)抽象类可以给出方法的实现,但是接口不可以,只能声明方法存在留给继承的子类实现

    (3)接口里的方法或变量必需是全部公开的,因为私有的没意义,而抽象类里可以有私有变量和方法

5、string s="";和string s=string.Empty;

  二者并没有什么区别,调试时可发现string.Empty其实也是"",所以这两个其实是一样的。

6、string和String

  可以这样理解,string是String的外号,两者在绝大部分情况下是一样的,只有一点不同,stirng无法做变量名而String可以。两者到底有啥区别?

  string是C#语言中的保留关键字,表示字符串类型。而String是.Net中的一个类,在CLR中并没有string这个说法,只有String类,C#代码在编译后string均被当成String处理。int和int32亦是同样的道理。

7、new

  new用的最多的是新建对象或结构实例,但在c#中new关键字还有另外两个作用,不经常用到,但也应知道,该知识点进入我视野起源于面试题,勾起回忆与CLR via C#,园子里已经有朋友特意写过关于这个知识点的文章(传送门:http://www.cnblogs.com/kingdom_0/articles/2023499.html),看了这位朋友的文章后自己思考了下,这里加上一点我自己的补充:

  (1)new在用于隐藏成员时并不是必需的,当在子类中重新定义成员时就隐式的隐藏了父类中的成员,若不用new编译器会给出警告但是并不会报错

  (2)new用于隐藏基类中的成员时,只对基类中非私有的成员起作用(比如基类中有private int x=1;,子类中写new private int x=2;并不会起到隐藏基类x的作用)

  (3)若基类中有字段A和方法B,方法B用到了字段A,子类中只有A和B同时被隐藏这样子类调用B方法时用到的才是子类中的重新定义的字段A,否则,若方法B在子类中并未被隐藏,那么调用子类中的方法B时使用的仍然是基类中的字段A

  (4)子类中被隐藏的成员与基类完全独立,类型神马的都可以改变,可见性当然也不在话下(这点与new无关,但是觉得挺重要,一并写了)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#、.Net学习资料免注册下载基地。。。发布时间:2022-07-10
下一篇:
C# 4.0 实现 Method Missing发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap