C#编程基础

来源:互联网 发布:软件项目经理 编辑:程序博客网 时间:2024/05/30 05:01

简述 private、 protected、 public、 internal 修饰符的访问权限。

private : 私有成员在类的内部才可以访问。 

protected : 保护成员,该类内部和继承类中可以访问。 

public : 公共成员,完全公开,没有访问限制。 

internal: 在同一命名空间内可以访问。


C#预定义的值类型和预定义的引用类型有哪些

C#预定义的值类型,主要包括5个类型:

整型、浮点类型、字符型、bool型、decimal型。

预定义的引用类型共2个:

分别是Object类型和String类型


如何解决装箱和拆箱引发的性能问题

装箱是指将一个值类型转换为一个Object类型 或 转换成被该值类型应用的接口类型

拆箱是指将一个引用类型转换为一个值类型

解决办法是在程序中大量使用泛型进行替代


有几种方法可以判断值类型和引用类型

值类型在栈中分配,数据定义就按照所需分配好,存取效率高

引用类型在堆中分配,类和结果都属于引用类型。

值类型继承System.ValueType、反之引用类型不继承。


C#变量作用域

变量的作用域是指可以访问该变量的代码区域。


C#有几种方法传递参数

4种方法传递参数

传值:Value,形参是实参的复制,不会影响实参在内存中的值

传址:将参数按引用进行传递,传参前必须初始化

输出参数:按引用进行传递,不需初始化,可以将多个参数回调给调用方法

数组参数:允许传不确定参数的数量


 简述C#Main方法

Main方法是程序的入口点,程序从此开始,也从此结束,一个C#程序中,Main()方法有且只能有一个


列举System.Collections中常用的成员

常用类:

ArrayList、可动态增加的数组实现

Hashtable、表示键/值对的集合

SortedList、表示键/值对的集合,可按照键和索引访问

常用接口:

ICollection、定义所有非泛型集合大小、枚举数和同步方法

IEnumerable、公开枚举数,支持在非泛型集合简单迭代

IList、按照索引单独访问对象非泛型集合


C#提供了哪几种循环结构

提供 do ---while 循环、while循环、for循环、foreach循环。

前两种经常用在不确定循环次数场合

For用于已知循环次数的操作

Foreach循环用于已知集合的循环操作


StringBuilderString有哪些区别

String:是引用类型、对象一旦生成,就不可改变,每次运算时会产生一个新的实例。

StringBuilder:对象是动态对象,允许修改封装字符串的字符数量。

在拼接许多字符串操作上,StringBuilder类效率更高;

少量字符串拼接操作上,String类更方便,扩展了许多字符串处理方法。


Hashtable几种常用遍历方法

Hashtable键值必须是唯一,无有效的排序

Hashtable共有4种遍历方法;

1、遍历哈希表中的键,

Foreach(string key in hashtable.keys){}

2、遍历哈希表中的值,

Foreach(EmpInfor emp in hashtable.Values){}

3、遍历哈希表中的键值,其键值为DictionaryEntry对象

Foreach(DictionaryEntry DE in hashtable){}

4、遍历哈希表中的键值,其键值为IDictionaryEnumerator对象

While(myEnum.MoveNext()){}


C#Stringstring的区别

String是String类型的一个别名,两者没有任何区别,在系统中尽量统一使用关键字


是否可以继承String?

String类是final类故不可以继承。

 

ArrayArrayList的区别

相同点:

Array和ArrayList所创建的对象都放在托管堆中

Array和ArrayList都具有索引,可以通过index来直接获取和修改任意项

Array和ArrayList都可以对自身进行枚举,都实现了IEnumerable接口

不同点:

命名空间不同:Array位于systemArrayList位于system.collections

变量声明不同:Array声明同时必须实例化数组大小不可改变,ArrayList只是先申   明,可以指定大小也可不指定,任意增加

设置下线不同:可以设置Array的下限,ArrayList下限始终为零

拥有维度不同:Array可以多维,ArrayList只能一维

存储对象不同:Array只能存储同构对象,ArrayList可以存储异构对象

存放方式不同:Array是始终连续存放,ArrayList存放不一定连续

设置项不同:  Array不能随意添加删除,ArrayList可任意插入删除


Array转换到ArrayList

Array转换到ArrayList可定义转换函数或转换类

ArrayList orderList = ArrayList.Adapter(orderArray)

ArrayList转换到Array通过内置ToArray()方法,需进行强制类型转换

        orderForm[] orderArrayList = (orderForm[])orderList.ToArray(typeof(orderForm));


C#checkedunchecked的作用

Checked开启整型算术和显示转换的溢出检查

Unchecked取消整型算术运算和转换的溢出检查


C#is运算符与as运算符

is检查对象是否给点类型兼容,返回值true false

As兼容引用类型之间是否能转换 返回null 引发异常


类和结构的区别

结构是值类型,使用struct关键字定义。类是引用类型

结构不能被继承,类可以被继承

结构没有默认的构造函数,也没有析构函数,不可使用protected修饰符,可以不可使用 new初始化,

类相反有默认构造函数,也有析构函数,还有protected修饰符,必须new初始化


C#中虚方法

虚方法用virtual关键字修饰,

虚方法可以再子类中被重写,并且必须提供子类覆盖方法的选项,必须有实现部分。


C#中密封类和密封方法

密封类使用sealed关键字进行修饰,密封类不能被继承不能做基类,

密封方法使用sealed关键字进行修饰,不影响类的继承,但可以防止重写基类中特定的虚方法


C#中静态类与构造方法

一个类中只允许一个无参的静态构造方法

静态方法不会被继承

构造方法在所有静态成员被引用前执行

所有构造方法静态构造方法最先被执行


override与重载的区别

override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要

Override 是进行基类中函数的重写。为了适应需要。


final override abstractinterface、 struct、 virtual、 sealed

Final:修饰符,类被声明为final,不能作为父类被继承。一个类不能既被声明为 abstract的,又被声明为final的。

      变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量 必须在声明时给定初值,而在以后的引用中只能读取,不可修改。

      被声明为final的方法只能使用,不能重载。

Override: override 声明重写的方法称为重写基方法,重写的基方法必须是 virtualabstract 或 override

Abstract:定义抽象类,抽象方法的关键字

Interface:定义接口的关键字

Struct:定义结构的关键字,结构不能被继承,结构没有默认的构造函数,也没有析构函数,不可使用protected修饰符,可以不使用new初始化。

Virtual:定义虚方法关键字,虚方法可以再子类中被重写,并且必须提供子类覆盖方法    的选项,必须有实现部分。

Sealed:密封类使用sealed关键字进行修饰,密封类不能被继承不能做基类,

        密封方法使用sealed关键字进行修饰,不影响类的继承,但可以防止重写基类中特定的虚方法


C#中派生类的构造函数

关键字base调用基类中的构造函数,this调用本类中的构造函数


简述接口及接口继承

接口是把多个继承类中的公共对象部分抽象出来,并封装这些公共对象的行为。

接口只定义,不包含方法实现

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

接口成员必须是公共的

接口不能直接被实例化

接口不能包含任何字段

接口可以多个接口继承

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

继承接口的类必须实现接口中所有定义的成员对象


什么是事件机制

事件为一种特殊的委托


简述EventHandlerList的作用

EventHandlerList提供一个存储事件的集合,可以将某个类型中多个事件维护在集合中,而不需要独立的为何每一个事件


什么是委托

委托类都继承自System.Delegate类型

委托是一种可用于封装命名或诺明方法的引用类型

委托类似于函数指针,但类型是安全和可靠的


委托与事件的用法 

public delegate void handels();//返回值是void,没有参数 

public event handels eventHandels; 

his.eventHandels = new handels(fun); 

public void fun() { }


C#中被委托的方法必须是静态的吗

委托不仅能绑定静态方法,还可以绑定实例方法,

绑定实例方法时:Delegate.Target属性将会设置成指向该实例方法所属类型的一个实例  对象

绑定静态方法时:Delegate.Target属性将会被设置成null


 多播委托

多播委托是指一个由委托串成的链表,

多播委托必须是同类型,返回类型必须是void,不可带输出参数,可带引用参数

当链表上的一个委托被回调时,后续会被顺序执行


 abstract classinterface有什么区别

abstract 类:

声明方法的存在而不去实现,也可以有部分实现

 不能多继承

抽象类中的方法不一定是抽象的

抽象方法有抽象类的子类去实现

抽象类必须实现所有抽象方法才能被实例化,否则实现父类中部分抽象方法,子类也必须定义为抽象类

interface):

是抽象类的变体。所有方法都是抽象的

接口(interface):

是抽象类的变体。所有方法都是抽象的。

接口可多继承

 继承接口的类必须实现接口中所有定义的成员对象


new有几种用法 

new 运算符 用于创建对象和调用构造函数。

new 修饰符 用于隐藏基类成员的继承成员。

new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。

































0 0
原创粉丝点击