方正阿帕比的笔经-C#基础概念

总结总结再总结

突然发现很多东西看过一遍后其实没有印象,必须总结总结再总结:

 

1 C#中 属于引用类型的是?A

A string B double C int D enum

说明:string 是引用类型,不是值类型

值类型:
单元直接存放“有效值”
如:
int a=3;
则a内存单元就放的是3

引用类型:
单元放的是另外一个对象的引用(地址)
如:
Form form1=new Form();
就是说,在内存中开辟了一个对象new Form(),form1内存单元存放的是那个对象的地址,并非对象本身

 

2 C#的语句输出结果

Double myVal=0.2;

Console.WriteLine("{0:#%}",myVal) ; B吧。。没啥说的

A 0.2% B 20% C {0:#%} D #%

 

3关于结构和类,说法正确的是:A

A 结构的成员默认public 类的成员默认private;

B 结构和类都是引用类型;

C 结构不能实现接口,类可以;

D 结构和类的静态属性都可以初始化;

说明:结构的成员默认public 类的成员默认private

结构是值类型,类是引用类型

结构体与类都能够实现接口

 

 

如图

值类型

C#的所有值类型均隐式派生自System.ValueType:

* 结构体:struct(直接派生于System.ValueType);
o 数值类型:
+ 整型:sbyte(System.SByte的别名),short(System.Int16),int(System.Int32),long(System.Int64),byte(System.Byte),ushort(System.UInt16),uint(System.UInt32),ulong(System.UInt64),char(System.Char);
+ 浮点型:float(System.Single),double(System.Double);
+ 用于财务计算的高精度decimal型:decimal(System.Decimal)。
o bool型:bool(System.Boolean的别名);
o 用户定义的结构体(派生于System.ValueType)。
* 枚举:enum(派生于System.Enum);
* 可空类型(派生于System.Nullable<T>泛型结构体,T?实际上是System.Nullable<T>的别名)。


引用类型

C#有以下一些引用类型:

* 数组(派生于System.Array)
* 用户用定义的以下类型:
o 类:class(派生于System.Object);
o 接口:interface(接口不是一个“东西”,所以不存在派生于何处的问题。Anders在《C# Programming Language》中说,接口只是表示一种约定[contract]);
o 委托:delegate(派生于System.Delegate)。
* object(System.Object的别名);
* 字符串:string(System.String的别名)。

可以看出:

* 引用类型与值类型相同的是,结构体也可以实现接口;
* 引用类型可以派生出新的类型,而值类型不能;
* 引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型);
* 引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。

结构和类的静态属性哪个可以初始化?这个始终不懂,望高人指点。

在C#中类和结构的区别

1. 值类型与引用类型 
(1)结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,
通过使用结构可以创建更多的值类型 

(2)类是引用类型:引用类型在上分配地址,堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某商业逻辑。因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用

  注:   

a.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object  
b.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,
且对象不可用
2.继承性 
(1)结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .
(2)类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承

注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样
3.内部结构: 
(1)结构:
没有默认的构造函数,但是可以添加构造函数
没有析构函数 没有 abstract 和 sealed(因为不能继承)
不能有protected 修饰符 可以不使用new 初始化 在结构中初始化实例字段是错误的
(2)类:
有默认的构造函数    有析构函数    可以使用 abstract 和 sealed    有protected 修饰符    必须使用new 初始化
4.如何选择结构还是类 

  讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:

1. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些 2. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。    3. 在表现抽象和多级别的对象层次时,类是最好的选择    4. 大多数情况下该类型只是一些数据时,结构时最佳的选择

 

 

 

4 那个关于接口的描述是错误的 选A

接口包含方法和属性,但不包含事件;

接口不包含方法的实现;

一个类可以实现多个接口;

继承接口的任何非抽象类型都必须实现接口的所有成员;

说明:接口包含方法和属性,也包含事件

 

接口具有下列属性:

  • 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

  • 不能直接实例化接口。

  • 接口可以包含事件、索引器、方法和属性。

  • 接口不包含方法的实现。

  • 类和结构可从多个接口继承。

  • 接口自身可从多个接口继承。

 

5 那些运算符属于右结合?选C吧 没啥说的

位移运算符 《 》

一元运算符++

元运算符new

赋值运算符;

6 下面哪个说法错误?选B

类不可以多重继承 接口可以

一个类可以有多个基类和多个基接口

抽象类自身可以定义成员接口不可以

抽象类和接口都不可以实例化

说明:一个类只能有一个基类和多个基接口

就先整理到这里,明天继续。。

 

转载于:https://www.cnblogs.com/FlyYang/archive/2008/10/21/1316168.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值