C#初学者必知:关键概念解析
需积分: 9 171 浏览量
更新于2024-09-29
收藏 158KB DOC 举报
cStr);
//非静态变量需要通过对象访问,不同对象的同一非静态变量可能有不同的值 Class1obj1=new Class1(); Class1obj2=new Class1(); obj1.notstaticStr+="1"; obj2.notstaticStr+="2"; Console.WriteLine("obj1's notstaticStr: {0}", obj1.notstaticStr); Console.WriteLine("obj2's notstaticStr: {0}", obj2.notstaticStr); } } } }
2.const和static readonly区别?答:const:const修饰的变量在编译时就确定其值,不能在运行时改变。const是常量,一旦赋值就不能修改。const是编译时常量,不占用内存空间。 static readonly:static readonly修饰的变量在运行时初始化,只能在声明或构造函数中赋值,且一旦赋值后不能更改。static readonly是运行时常量,占用内存空间。 示例:
using System; namespace Example02 { class Program { public const int ConstValue = 10; public static readonly int ReadonlyValue = 20; static void Main(string[] args) { //尝试在构造函数之外修改const值,会引发编译错误 //ConstValue = 30; ReadonlyValue = 40; //运行时修改ReadonlyValue值,但编译器不允许 Console.WriteLine("ConstValue: {0}", ConstValue); Console.WriteLine("ReadonlyValue: {0}", ReadonlyValue); } } }
3.extern是什么意思?答:extern用于引用C/C++编译的外部函数,它告诉C#编译器函数的实现是在其他地方,通常在DLL中。 extern关键字用于声明一个方法,但不提供方法体。 示例:
using System; using System.Runtime.InteropServices; namespace Example03 { class Program { [DllImport("kernel32.dll")] extern static bool Beep(uint freq, uint duration); static void Main(string[] args) { Beep(500, 1000); } } }
4.abstract是什么意思?答:abstract在C#中表示抽象,可以修饰类、方法和属性等。抽象类不能被实例化,只能作为其他类的基类。抽象方法没有实现,必须在派生类中重写。
5.internal修饰符起什么作用?答:internal是C#中的访问修饰符,表示仅限于当前程序集内访问。它限制了类或成员的可见性,使得它们对其他程序集不可见。
6.sealed修饰符是干什么的?答:sealed修饰符用于密封类,阻止其他类继承这个类。密封类不能成为抽象类的子类,并且其抽象方法必须提供实现。
7.override和overload的区别?答:override重写父类的虚方法,实现方法签名必须与被重写的方法完全相同。overload是方法多态,通过不同的参数列表来创建多个同名方法。
8.什么是索引指示器?答:索引指示器(Indexers)允许类像数组一样通过索引来访问数据,提供自定义的访问方式。例如,List<T>类中的this[int index]就是索引指示器。
9.new修饰符是起什么作用?答:new修饰符用于隐藏基类的成员,或者在派生类中重新声明和初始化实例构造函数。
10.this关键字的含义?答:this关键字在C#中代表当前对象的引用,主要用于区分实例方法中的局部变量和成员变量,也可以在构造函数中调用其他构造函数。
11.可以使用抽象函数重写基类中的虚函数吗?答:不可以,抽象函数在基类中已经声明但没有实现,因此派生类必须重写抽象函数,而不能重写虚函数。
12.密封类可以有虚函数吗?答:不能,密封类不能再被继承,所以它的成员不能是虚的,因为虚成员是为了支持多态性,而密封类已经禁止了这种特性。
13.如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后可以有几个属性访问器?如果基类中有get和set两个呢?答:如果基类中的虚属性只有一个访问器,如只有get,那么继承类重写该属性时也必须只有一个get访问器。如果基类有get和set两个访问器,继承类可以有0个、1个或2个访问器,但必须至少重写其中一个。
14.abstract可以和virtual一起使用吗?可以和override一起使用吗?答:abstract不能与virtual一起使用,因为抽象方法不需要实现。但abstract方法可以被override,以提供具体实现。
15.接口可以包含哪些成员?答:接口可以包含方法、属性、事件和索引器,但不能包含字段、构造函数、析构函数和静态成员。
16.类和结构的区别?答:类是引用类型,分配在堆上,支持继承和装箱拆箱操作;结构是值类型,分配在栈上或作为结构体数组的一部分,不支持继承,但可以实现接口。
17.接口的多继承会带来哪些问题?答:接口多继承可能导致命名冲突,需要通过接口别名解决。另外,多继承可能导致复杂的设计和实现,增加代码维护难度。
18.抽象类和接口的区别?答:抽象类可以有成员实现,可以有构造函数,可以有非抽象成员,可被单继承;接口不包含实现,只能有公有的、静态的、不可变的成员,可以被多重继承。
19.别名指示符是什么?答:别名指示符(using alias directive)允许为命名空间或类型创建别名,以简化代码并提高可读性。
20.如何释放非托管资源?答:使用using语句块或实现IDisposable接口来管理非托管资源的生命周期,确保在不再使用时正确释放。
21.P/Invoke是什么?答:P/Invoke(Platform Invoke)是.NET Framework提供的机制,用于调用非托管(通常是C/C++)代码,如Windows API函数。
22.StringBuilder和String的区别?答:String是不可变类型,每次修改都会创建新对象,效率较低;StringBuilder是可变类型,适用于大量字符串拼接操作,性能更优。
23.explicit和implicit的含义?答:explicit和implicit是类型转换运算符的修饰符,explicit表示显式转换,需要程序员手动调用;implicit表示隐式转换,编译器自动完成。
24.params有什么用?答:params关键字用于定义方法参数,允许传递可变数量的参数,这些参数会被当作数组处理。
25.什么是反射?答:反射是.NET框架的一个功能,允许程序在运行时检查自身信息(如类型、成员、属性等),并能动态创建对象和调用方法。这对于插件架构、序列化、动态编程等场景非常有用。
249 浏览量
2010-11-12 上传
2010-06-01 上传
2009-05-29 上传
1749 浏览量
sanlongyu
- 粉丝: 0
- 资源: 1
最新资源
- 商业
- S7-200SMART PLC_10的幂函数库文件+使用说明.rar
- JTBC网站内容管理系统jenfy美化版
- MySonet-开源
- 西门子PLC测试功能.rar
- 易语言复制组件
- STM32F103C8T6超声波测距,c语言开发tts引擎源码,c语言
- de.htwg.se.BlackjackKNInScala:BlackjackKN,SE项目
- sentry-wizard:Sentry项目设置向导
- 变压器传输特性仿真电路Proteus电路仿真.rar
- 风机负压力自动控制系统.rar
- Epl_Ds_challenge
- k近邻法,适合学生的c语言项目源码,c语言
- 菲菲美业2015年母亲节专题页
- 工作汇报·总结2.rar
- TailLog源:TailLog源(TailLog开源代码)