前言
面试是应聘一个工作岗位的环节,来考察一个人的工作能力与综合素质。在应聘C#程序员或与C#相关岗位时,我们都会被问到一些与.NET、C#、数据库、业务知识或编程思想等问题。本文列举一些问题及提供参考答案,题目(三)。
题目
61、C#语言中Property与Attribute的区别
参考答案: Property称属性 是用来对类、结构的成员变量进行读取或赋值。通常是一对get与set;Attribute称特性是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。
示例:
cs
// 此处定义类的Name称属性(Property)
public class Cars
{
/// <summary>
///
/// </summary>
public string Name{get;set;}
}
// 此处在类上声明性标签Serializable 称特性(Attribute)
[Serializable]
public class Cars
{
/// <summary>
///
/// </summary>
public string Name{get;set;}
}
62、什么是强类型系统
参考答案:每个变量和常量都有一个类型,必须先声明才能使用。C# 是一种强类型语言。
63、调用WebService的常用方法有哪些
参考答案:1、通过引用wsdl文件的方式直接生成WebService调用类。2、指定的WebService地址的WSDL,生成一个代理类,通过反射动态调用里面的方法。
64、能用foreach遍历访问的对象需要实现什么接口或声明什么方法的类型
参考答案:需实现IEnumerable接口或声明GetEnumerator方法的类型。
65、C#语言有哪些主要的数据类型?它们之间是怎样进行相互转换的?
参考答案:值类型(整数类型、字符类型、浮点类型、布尔类型、结构类型和枚举类型)和引用类型(类、接口、委托、数组、字符串等)。它们可通过隐式类型转换或显式类型转换。
66、C#语言有几种表达式?根据什么确定表达式的类型?
参考答案:在C#中,基本表达式有5种:算术表达式、关系表达式、逻辑表达式、条件表达式和赋值表达式.表达式的类型由运算符的类型决定。
67、名空间有什么作用
参考答案:命名空间既是.NET提供系统资源的分层组织方式,也是分层组织程序的方式。命名空间有两种:一种是系统命名空间,一种是用户自定义命名空间。
68、根据get和set访问器是否存在,属性可以分成哪几种类型?
参考答案:如果只设置get访问器,则为只读属性,若只设置set访问器,则为可写属性,两个访问器均存在时,为既可读又可写属性。
69、接口声明主要由几部分组成,各部分的作用是什么?
参考答案:接口声明由访问修饰符、interface 关键字以及接口名。其中:接口的访问修饰符有new、public、protected、internal和private,各个修饰符都代表不同的访问权限。new修饰符仅允许在类中定义的接口内使用,它指定接口隐藏同名的继承成员。public、protected、private和internal修饰符用于控制接口的可访问性,与前面所介绍的意义相同。接口名称通常以I开头。要实现该接口,必须有类继承该接口。
70、概述三层结构体系
参考答案:三层结构体系,就是在客户端和数据库之间加入了一个中间层,三层是指逻辑上的三层,而不是物理上的三层。中间层通常包括业务逻辑层、数据访问层、数据对象模型层。常说三层结构体系就是将整个业务应用划分为:1、表现层(展现给用户的界面);2、业务逻辑层(按功能对业务逻辑进行处理后进行数据层操作);3、数据访问层(直接操作数据库,对数据的增添改查等)。
71、C#中的重载是什么
参考答案:重载是指在同一个作用域内,定义多个名称相同但参数个数、类型或顺序不同的方法。
72、DataGridView.DataSource 可以连接什么的数据源
参考答案:DataTabe、DataView、DataSet、DataViewManager等任何实现IListSource或IList接口的数据源。
73、C# 中 extern的作用是什么
参考答案:extern 是C#语言中的修饰符,用于声明在外部实现的方法。常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 特性一起使用。extern 与 DllImport 特性一起使用时必须将方法声明为 static。
cs
/// <summary>
/// 设置窗口区域
/// </summary>
/// <param name="hwnd">设置区域的窗口句柄</param>
/// <param name="hRgn">设置的区域</param>
/// <param name="bRedraw">是否立即重画窗口</param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern int SetWindowRgn(IntPtr hwnd, int hRgn, Boolean bRedraw);
74、C# 中 params 的作用是什么
参考答案:params 是C#语言中的关键字,用于指定采用数目可变的参数的方法参数。方法参数只能出现一次并且在其后不能再有参数定义。
cs
/// <summary>
///
/// </summary>
/// <param name="listItem"></param>
/// <returns></returns>
public List<string> GetList(params string[] listItem)
{
List<string> list = new List<string>();
for (int i = 0; i < listItem.Length; i++)
{
list.Add(listItem[i]);
}
return list;
}
75、私有成员会被继承吗
参考答案:继承后子类可以拥有父类所有的成员,也包括私有(private)成员,但子类访问不了。
76、C#中的数组有没有Length()这个方法?string是否有这个方法?
参考答案:数组和字符串都有 Length 属性,而不是Length() 方法。
cs
int[] intArray = new int[]{1, 2, 3, 4, 5};
// 获取数组长度
int length = intArray.Length;
string sayContent = "Hello World";
// 获取字符长度
length = sayContent.Length;
77、概述ORM的原理
参考答案:ORM是对象关系映射,用于实现数据库中的关系数据和内存中的对象之间的映射。其原理是利用反射配置将对象和数据库表映射。
78、编程遍历窗体上所有TextBox控件并将其Text属性赋值为string.Empty?
参考答案:
cs
foreach(System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox textBox =(System.Windows.Forms.TextBox)control;
textBox.Text = String.Empty;
}
}
79、abstract 可以和 virtual 或 override 一起使用吗?
参考答案:abstract 修饰符不可以和 static、virtual 、 override 修饰符一起使用
80、什么是泛型
参考答案:泛型是指在编写类或方法时延迟指定数据类型,直到实际使用时才进行指定,达到同一个类或方法处理不同数据的技术。
81、命名空间System.Data的作用
参考答案:System.Data提供对 ADO.NET 体系结构的类的访问权限。
82、object是C#的关键字吗?请指出C#中有哪些类型关键字,如int、float。
参考答案:object是C#的关键字,类型关键字有object、int、uint、long、ulong、short、ushort、byte、sbyte、char、float、double、decimal、bool。
83、指出C#中是否有下列关键字?virtual、sealed、abstract、import、as、in、goto、final、Const、signed、String
参考答案:没有的关键字:import、final、Const(const才是C#的关键字)、signed、String(string 才是C#的关键字)
84、指出delegate(委托)、enum、int[]、string 分别属于引用类型还是值类型
参考答案:delegate引用类型、enum值类型、int[]引用类型、string引用类型。
85、如何在C#中实现继承?C#支持多重继承吗?
参考答案:在类名后加上一个冒号,再加上基类的名称。C#不支持多重继承。可以用接口来实现。
cs
//基类
public class Animal
{
}
// 派生类
public class Dog:Animal
{
}
86、能够将非静态的方法覆写成静态方法吗?
参考答案:不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。
87、virtual、sealed、override和abstract的区别
参考答案:virtual是声明虚方法的关键字,方法可以被重写;sealed是密封类的关键字, sealed的类不可被继承;override重写基类的方法;abstract声明抽象类或方法的关键字,抽象方法不提供实现,由子类实现,抽象类不可实例化。
88、C#启动线程是用Run()还是Start()
参考答案:Start是Thread 类启动线程的方法;而Run是Tasks 类启动任务的方法,
cs
Thread thread = new Thread(ThreadExeMethod);
thread.Start();
/// <summary>
///
/// </summary>
static void ThreadExeMethod()
{
Console.WriteLine("线程调用方法");
}
89、两个对象值相同x.Equals(y)==true,但却可有不同的Hashcode,这句话对不对?
参考答案:不对,它们的Hashcode是相同的。
cs
string x = "Hello";
string y = "Hello";
if (x.Equals(y))
{
Console.WriteLine(string.Format("x的Hascode={0}",x.GetHashCode()));
Console.WriteLine(string.Format("y的Hascode={0}", y.GetHashCode()));
}
输出:
x的Hascode=-327378614
y的Hascode=-327378614
90、软件开发过程一般有几个阶段?
参考答案:软件开发过程一般可分为:可行性研究、需求分析、概要设计、详细设计、实现、测试、使用与维护。
小结
以上是30个C#面试题目,后续继续列举一些问题及提供参考答案,敬请关注后续内容。