C#编程实践:重要知识点解疑(学习笔记)

1. C#中的委托是什么?事件是不是一种委托?
答:C#中的委托是一种动态调用方法的类型,与类、接口和数组一样属于引用型,类似于C++函数的指针,但不同的是其完全面向对象,是安全的数据类型。事件是一种委托,它是多播委托的一个特例,是一个特殊的多路广播委托。

2. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:在C#中索引器是类的一种成员,它可以存取类的实例,让对象像数组一样被索引,操作方法和数组类似。索引器不止能根据数字进行索引,其索引类型可以是任意类型,包括数组或集合。

3. 什么是装箱和拆箱?
答:装箱就是将值类型转换为Object类型,Object是所有类型的最终基类;拆箱则相反,是将Object转化为值类型。

4. ADO.NET中常用的对象有哪些?分别描述一下。
答:
(1)Connection对象,用于与数据源建立连接。
(2)Command对象,用于对数据源执行指定命令。
(3)DataReader对象,用于从数据源返回一个仅向前的只读数据流。
(4)DataAdapter对象,自动将数据的各种操作变换到数据源相应的SQL语句。

5. try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
答:无论是否发生异常,finally{}里的code一定会执行,它会在return之前被执行,且要return的内容不会受finally里面的内容影响。

6. DataReader与Dataset有什么区别?
答:DataReader提供了仅向前和只读的操作方式,一次只读取一条记录;Dataset称作数据集,它将从数据源获得的数据保存在内存中,可以理解成一个临时数据库。两者的区别在于,前者必须在连接数据库的情况下才能操作数据,可以较快地查询和修改少量的数据;后者能大批量地查询和修改数据,操作数据期间不需要连接数据库,极大地加快了数据访问和处理速度,节约了资源。

7. 在ADO.NET中,command对象是哪些方法执行命令?
答:
(1)ExcuteNonQuery()方法:执行CommandText属性所指定的操作,返回受影响的行数。该方法一般用来执行SQL中的Update、Insert和Delete等操作。
(2)ExcuteReader()方法:执行CommandText属性所指定的操作,并创建DataReader对象。
(3)ExcuteScalar()方法:执行CommandText属性所指定的操作,返回执行结果中首行首列的值。该方法只能执行Select语句,通常用于统计,例如返回符合条件的记录个数。

8. 在C#中using和new这两个关键字有什么意义?
答:using关键字一是用来允许在命名空间中使用类型或者为类型创建别名,二是用来允许程序员指定使用资源的对象何时释放资源。new关键字常用于将对象实例化,这样系统才能为对象分配内存空间;或者用于修饰一个方法,表示此方法完全重写,即隐藏基类方法。

9. 请将字符串"I am a student"按单词逆序输出如"student a am I"。
答:将输入的字符串以空格为分隔符划分出一个个单词,然后存储在一个字符串数组中,最后倒序输出该数组即可。代码如下:

string a = Console.ReadLine();
string[] s = a.Trim().Split(' '); // 按空格划分出单词,并存储在字符串数组中
for(int i = s.Length - 1; i >= 0; --i) // 倒序输出字符串数组
{       
	Console.Write(s[i] + " ");
}
Console.ReadKey();

10. 如何把一个Array复制到ArrayList中?
答:
(1)方法一:使用for循环或foreach循环,将Array数组中的数据逐步放入ArrayList的对象中。
(2)方法二:使用ArrayList的CopyTo()方法,进行数据的复制。
(3)方法三:使用ArrayList的Adapter()方法,将整个Array对象封装到ArrayList对象中。
(4)方法四:直接使用ArrayList的构造方法传入Array,因为Array实现了ICollection。

11. 叙述const与readonly的区别。
答:const和readonly都用于声明常量,前者在程序编译时初始化,只能在声明中赋值;后者在程序运行时初始化,可以在构造函数中进行赋值。

12. StringBuilder与String区别是什么?
答:String声明的字符串是不可变的,即内容不能更改;而StringBuilder增强了字符串的操作,可以构造可变字符串。

13. 编程遍历页面上所有TextBox控件并给它赋值为string.Empty?
答:使用递归对页面control树进行完全遍历,并对每一个control进行处理。代码如下:

private void InitialControl(ControlCollection objControlCollection)
{    
	foreach (System.Web.UI.Control objControl in objControlCollection)    
	{        
		if (objControl.HasControls()) // 检查该控件是否包含其他控件       
		{            
			InitialControl(objControl.Controls);        
		}        
		else        
		{            
			if (objControl is System.Web.UI.WebControls.TextBox) // 如果该控件为TextBox        
			{                
				((TextBox)objControl).Text = string.Empty;            
			}        
		}    
	}
}

14. LinQ是什么?
答:LINQ(Language Integrated Query),即语言集成查询,是一组用于C#和Visual Basic语言的扩展,它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。

15. Lambda表达式是什么呢?
答:Lambda表达式实际上是一种匿名函数,在Lambda表达式中可以包含语句以及运算等操作,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。使用Lambda表达式可大大减少代码量,使得代码更加的优美、简洁,更有可观性。

16. EF是什么?
答:EF是一种通过映射操作实现数据交互的ORM框架技术。

17. 什么叫做泛型?
答:泛型是通过“参数化类型”来实现在同一段代码中操作多种数据类型,是一种编程范式,它利用“参数化类型”将类抽象化,从而实现更为灵活的复用。泛型赋予代码更强的安全性、更好的复用、更高的效率和更清晰的约束,其另一个优点“类型安全”,即如果采用泛型,可以较早的检查放入集合中的元素是否是预定的类型,以保证类型安全。

如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

猜你喜欢

转载自blog.csdn.net/weixin_40589192/article/details/106925769