`

c#的一些问题和我的参考答案

阅读更多

简答题目
1.面向对象的思想主要包括什么?继承 多态 封装
封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。
继承:子类拥有父类的所有数据和操作。
多态:一个程序中同名的不同方法共存的情况。
有两种形式的多态– 重载与重写。
2.什么是装箱和拆箱?举例说明
装箱(boxing)和拆箱(unboxing)机制使得在C#类型系统中,任何值类型、引用类型和object(对象)类型之间进行转换,这种转换称为绑定连接。简单地说,有了装箱和拆箱的概念,对任何类型的值来说最终都可看作是object类型。 1、装箱转换
含义:将一个值类型隐式地转换成一个object类型,或把这个值类型转换成一个被该值类型应用的接口类型,把一个值类型的值装箱,就是创建一个object实例并将值复制给这个object
如: int I=10; object obj=I; 也可用显式的方法进行装箱操作: object obj=(object)I;
2、拆箱转换
和装箱相反,拆箱转换是指将一个对象类型显式地转换成一个值类型,或将一个接口类型显式地转换成一个执行该接口的值类型。
过程分两步:
首先,检查这个对象实例,看它是否为给定的值类型的装箱值
然后,把这个实例的值拷贝给值类型的变量。如:
int I=10;
object obj=I;
Int j=(int)obj;
3.什么是重载?override与重载的区别?
重载是指针对所继承下来到方法,重新设计其处理方式,为将来原本处理方式覆盖过去。
在派生类要覆盖的方法前加override修饰,而基类的同名方法前加virtual修饰。这样就能实现多态。多态指一个程序中同名的不同方法共存的情况。 有两种形式的多态– 重载与重写。
4.值类型和引用类型的区别?写出C#的样例代码。
值类型的变量本身包含他们的数据,而引用类型的变量包含的是指向包含数据的内存块的引用或叫句柄。
值类型变量存储在堆栈。每个程序在执行时都有自己的堆栈,其他程序不能访问。
引用类型存储在堆。引用类型存贮实际数据的引用值的地址。
C#中的引用类型有4种(类、代表、数组、接口)
5.如何理解委托?
代理是C#中的一种新的类型,要把方法作为参数传递给其他方法时,需要用到代理。
方法通过参数获得外界传递给他的数据,并对这些数据进行一定的操作。
C#通过代理机制来实现,通过参数把一个方法传递给另外一个方法。
代理四步曲:
a.生成自定义代理类:delegate int MyDelegate();
b.用New运算符实例化代理类:
MyDelegate d = new MyDelegate(MyClass.MyMethod);
c.最后通过实例对象调用方法:int ret = d();
d. 在程序中像调用方法一样应用代理的实例对象调用它指向的方法。 delegate int d(int I);
6.C#中的接口和类有什么异同。
什么是类?类可以这么理解.类就是功能的集合.类也可以看做是实现一种功能的集合或者方法..接口的概念:什么是接口?接口可以理解为,对类的规定,对类的约束,甚至对整个项目的约束. 种模版,定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。但接口是一个行为的规范,里面的所有东西都是抽象的!一个类只可以继承一个基类也就是父类,但可以实现多个接口
7.net中读写数据库需要用到哪些类?
Connection DataAdapter DataSet Command DataReader
8.如何理解.net中的垃圾回收机制。
如果发现内存不够,则垃圾回收器,将全部对象作为无效对象(被回收对象),然后先将全局变量,static,处于活动中的局部变量,以及当前CG指针指向的对象放入一个表中.然后
会搜索新列表中的对象所引用的对象.加入列表中,其他没有被加入列表的对象都会被回收.
非托管对象要记得释放资源就行了吧.
9..net的错误处理机制是什么
错误的处理顺序:finally先,catch次之,最后退会try代码..取消此次操作.返回catch中的异常信息.当然,你也可以定制自己的错误处理机制...如果你的异常处理中包含finally块.则此finally无论是否发生异常始终会被执行...
10.c#中using和new这两个关键字有什么意义?
using 的用途是为某个namespace建立别名,或者引用存在系统中的其它namespace.
New 用来创建实例,或者覆写方法。
11.谈谈类和结构的区别?
1. 值类型与引用类型
?结构是值类型:值类型在堆栈上分配地址
?类是引用类型:引用类型在堆上分配地址
2.继承性
?结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然没有明确sealed声明,可结构是隐式的sealed .
?类:完全可扩展的,除非显式声明sealed, 否则类可以继承其他类和接口,自身也能被继承 。
注:虽然结构不能被继承 ,可结构能够继承接口,方法和类继承接口一样 。
3.内部结构的区别:
结构:
?没有默认的构造函数,可以添加构造函数
?没有析构函数
?没有 abstract 和 sealed(因为不能继承)
?不能有protected 修饰符
?可以不用new 初始化
?在结构中初始化实例字段是错误的
类:
?有默认的构造函数
?有析构函数
?可以使用 abstract 和 sealed
?有protected 修饰符
?必须使用new 初始化
12.什么是CLR?
公共语言运行时(Common Language Runtime,CLR),提供了一个可靠而完善的多语言运行环境。CLR是一个软件引擎,用于加载应用程序、检查错误、进行安全许可认证、执行和清空内存。它属于纯动态运行时的一种,它的主要组成部分是虚拟执行引擎VEE(Virtual Execution Enging),它可以打破语言和平台的限制。
13.C#的优点是什么?至少列出4点
1.C#中指针已经消失. 允许对原始指针的有限制的使用.
2.基于.NET平台的,继承了自动内存管理和垃圾回收的特点.
3.C#拥有内建的支持来将任何组件转换成一个web service,运行在任何平台上的任何应用程序都可以通过互联网来使用这个服务.
4.面向对象的
14.面向对象编程的三大原则是什么?分别加以说明
?继承:都支持类的单一继承,但类可以实现多个接口。所有类都从一个公共的基类继承。
?封装与可见性:都可决定类成员是否可见。除了C#的internal访问修饰符外,两者可见性机制非常相似
?多态性:Java和C#都支持某些形式的多态性机制,且两者实现方法非常类似。
15.C#有哪5种类型的可访问性?
?public:成员可以从任何代码访问。
?protected:成员只能从派生类访问。
?internal:成员只能从同一程序集的内部访问。
?protected internal:成员只能从同一程序集内的派生类访问。
?private:成员只能在当前类的内部访问。
16.C#代码在执行前要编译为中间语言 ,中间语言的主要特征有?
● 面向对象和使用接口
● 值类型和引用类型之间的巨大差别
● 强数据类型
● 使用异常来处理错误
● 使用属性(attribute)
17.C#中引用类型有哪几种?
(类、代表、数组、接口)
18.对象间可能存在的三种关系?
聚合,一个(较复杂的)对象由其他若干(较简单的)对象作为其构成部分,称作聚合。
关联,对象之间的静态联系(即通过对象属性体现的联系)称作关联。
继承

编程题目
1.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。
2.写一个实现对一段字符串翻转的方法 。
class StringReversal
{
public String StrReversal(String oldString)
{
//Convert string to char arry
Char[] oldCharArray = oldString.ToCharArray();
//Reversal from zero
int index = 0;
int cLength = oldCharArray.Length - 1;
while(index<cLength)
{
//use char CTemp to swap
char cTemp = oldCharArray[index];
oldCharArray[index] = oldCharArray[cLength];
oldCharArray[cLength] = cTemp;
index ++;
cLength --;
}
//Convert char array to string only have the constructor method
string newString = new string(oldCharArray);
return newString;
}
}
3.实现一个冒泡排序算法?
public void BubbleSort(int[] R)
  {
   int i,j,temp; //交换标志
   bool exchange;
   for(i=0; i<R.Length; i++) //最多做R.Length-1趟排序
   {
   exchange=false; //本趟排序开始前,交换标志应为假
   for(j=R.Length-2; j>=i; j--)
   {
   if(R[j+1]<R[j]) //交换条件
   {
    temp=R[j+1];
    R[j+1]=R[j];
    R[j]=temp;
    exchange=true; //发生了交换,故将交换标志置为真
   }
   }
   if(!exchange) //本趟排序未发生交换,提前终止算法
   {
   break;
   }
   }
  }
4. 用拷贝的方法来创建数组
using System;
class Test
{ public static void Main(String []args)
{ int [] Array1=new int [5]{4,3,2,1,0};
int [] Array2=(int[])Array1.Clone();
//创建新数组但内容为Array1
for(int i=0; i<Array2.Length;i++)
{ //获得Array2[i]数组中的某个元素的值并显示出其值
Console.WriteLine("Array2[{0}]:{1}",i,Array2[i]);
}//显示的结果为 4、3、2、1、0
}
}
5.找最大数游戏:有一批数,请你快速地找出最大数及其位置。
6. 九九乘法表
static void Main(string[] args)
{ for(int i=1; i<10; i++)
{ for(int j=1; j<= i; j++)
{int s = i * j;
Console.Write(j.ToString() + "×" + i.ToString() + "=" + s.ToString() + " ");
}
Console.WriteLine("");
}
Console.ReadLine();
}
7.最大公约数
max_gongyue(int m,int n)
{
int i=min(m,n)-1;
for(;i>1;i--)
if((!(m%i))&&(!(n%i)))
break;
return i;
}
8.求数的阶乘
static void Main(string[] args)
{while(true)
{Console.Write("请输入一个正整数(输入0退出):");
int x = int.Parse(Console.ReadLine());
if (x == 0)
{break;}
int y = x;
checked
{ for(int i=x-1; i>0; i--)
{y = y * i;}
}
Console.WriteLine("{0}的阶乘是:{1}", x, y);
}
Console.WriteLine("按回车键退出...");
Console.ReadLine();
}
9.折半查找并显示进度
int BinarySearch(Type a[],const Type& x,int n)
{
int left=0;
int right=n-1;
while(left<=right){
int middle=(left+right)/2;
if (x==a[middle]) return middle;
if (x>a[middle]) left=middle+1;
else right=middle-1;
}
return -1;
}
10.四则运算题目
static void Main(string[] args)
{
Console.WriteLine("输入运算式");
for(int i=0;i<args.Length;i++)
{
Console.WriteLine("输入的参数{0}:{1}",i,args[i]);
}
double a,b;
double y=0;
a=double.Parse(args[0]);
b=double.Parse(args[2]);
switch(args[1])
{
case"+":
{
y=a+b;
break;
}
case"-":
{
y=a-b;
break;
}
case"*":
{
y=a*b;
break;
}
case"/":
{
if(b==0)
{
Console.WriteLine("除数不能为0");break;
}
else{y=a/b;break;}
}

}
Console.WriteLine("结果为:{0}",y);
11.判断彩票是否中奖
输入一组数字(7位),判断这组数字中几等奖,判断规则如下
一等奖:中7个数;二等奖:中6个数
三等奖:中5个数;四等奖:中4个数;五等奖:中3个数
其它的没有中奖
最终打印出中几等奖,如中一等奖打印“一等奖”,没有中奖打印“没有中奖”
注:中奖号码为已知,可以自定义一组整型数组,如:
int [] luck = new int[7];
luck[0] = 0;luck[1] = 1;luck[2] = 2;luck[3] = 3;luck[4] = 4;luck[5] = 5;luck[6] = 6;
简答题目
1.面向对象的思想主要包括什么?继承 多态 封装
封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。
继承:子类拥有父类的所有数据和操作。
多态:一个程序中同名的不同方法共存的情况。
有两种形式的多态– 重载与重写。
2.什么是装箱和拆箱?举例说明
装箱(boxing)和拆箱(unboxing)机制使得在C#类型系统中,任何值类型、引用类型和object(对象)类型之间进行转换,这种转换称为绑定连接。简单地说,有了装箱和拆箱的概念,对任何类型的值来说最终都可看作是object类型。 1、装箱转换
含义:将一个值类型隐式地转换成一个object类型,或把这个值类型转换成一个被该值类型应用的接口类型,把一个值类型的值装箱,就是创建一个object实例并将值复制给这个object
如: int I=10; object obj=I; 也可用显式的方法进行装箱操作: object obj=(object)I;
2、拆箱转换
和装箱相反,拆箱转换是指将一个对象类型显式地转换成一个值类型,或将一个接口类型显式地转换成一个执行该接口的值类型。
过程分两步:
首先,检查这个对象实例,看它是否为给定的值类型的装箱值
然后,把这个实例的值拷贝给值类型的变量。如:
int I=10;
object obj=I;
Int j=(int)obj;
3.什么是重载?override与重载的区别?
重载是指针对所继承下来到方法,重新设计其处理方式,为将来原本处理方式覆盖过去。
在派生类要覆盖的方法前加override修饰,而基类的同名方法前加virtual修饰。这样就能实现多态。多态指一个程序中同名的不同方法共存的情况。 有两种形式的多态– 重载与重写。
4.值类型和引用类型的区别?写出C#的样例代码。
值类型的变量本身包含他们的数据,而引用类型的变量包含的是指向包含数据的内存块的引用或叫句柄。
值类型变量存储在堆栈。每个程序在执行时都有自己的堆栈,其他程序不能访问。
引用类型存储在堆。引用类型存贮实际数据的引用值的地址。
C#中的引用类型有4种(类、代表、数组、接口)
5.如何理解委托?
代理是C#中的一种新的类型,要把方法作为参数传递给其他方法时,需要用到代理。
方法通过参数获得外界传递给他的数据,并对这些数据进行一定的操作。
C#通过代理机制来实现,通过参数把一个方法传递给另外一个方法。
代理四步曲:
a.生成自定义代理类:delegate int MyDelegate();
b.用New运算符实例化代理类:
MyDelegate d = new MyDelegate(MyClass.MyMethod);
c.最后通过实例对象调用方法:int ret = d();
d. 在程序中像调用方法一样应用代理的实例对象调用它指向的方法。 delegate int d(int I);
6.C#中的接口和类有什么异同。
什么是类?类可以这么理解.类就是功能的集合.类也可以看做是实现一种功能的集合或者方法..接口的概念:什么是接口?接口可以理解为,对类的规定,对类的约束,甚至对整个项目的约束. 种模版,定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。但接口是一个行为的规范,里面的所有东西都是抽象的!一个类只可以继承一个基类也就是父类,但可以实现多个接口
7.net中读写数据库需要用到哪些类?
Connection DataAdapter DataSet Command DataReader
8.如何理解.net中的垃圾回收机制。
如果发现内存不够,则垃圾回收器,将全部对象作为无效对象(被回收对象),然后先将全局变量,static,处于活动中的局部变量,以及当前CG指针指向的对象放入一个表中.然后
会搜索新列表中的对象所引用的对象.加入列表中,其他没有被加入列表的对象都会被回收.
非托管对象要记得释放资源就行了吧.
9..net的错误处理机制是什么
错误的处理顺序:finally先,catch次之,最后退会try代码..取消此次操作.返回catch中的异常信息.当然,你也可以定制自己的错误处理机制...如果你的异常处理中包含finally块.则此finally无论是否发生异常始终会被执行...
10.c#中using和new这两个关键字有什么意义?
using 的用途是为某个namespace建立别名,或者引用存在系统中的其它namespace.
New 用来创建实例,或者覆写方法。
11.谈谈类和结构的区别?
1. 值类型与引用类型
?结构是值类型:值类型在堆栈上分配地址
?类是引用类型:引用类型在堆上分配地址
2.继承性
?结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然没有明确sealed声明,可结构是隐式的sealed .
?类:完全可扩展的,除非显式声明sealed, 否则类可以继承其他类和接口,自身也能被继承 。
注:虽然结构不能被继承 ,可结构能够继承接口,方法和类继承接口一样 。
3.内部结构的区别:
结构:
?没有默认的构造函数,可以添加构造函数
?没有析构函数
?没有 abstract 和 sealed(因为不能继承)
?不能有protected 修饰符
?可以不用new 初始化
?在结构中初始化实例字段是错误的
类:
?有默认的构造函数
?有析构函数
?可以使用 abstract 和 sealed
?有protected 修饰符
?必须使用new 初始化
12.什么是CLR?
公共语言运行时(Common Language Runtime,CLR),提供了一个可靠而完善的多语言运行环境。CLR是一个软件引擎,用于加载应用程序、检查错误、进行安全许可认证、执行和清空内存。它属于纯动态运行时的一种,它的主要组成部分是虚拟执行引擎VEE(Virtual Execution Enging),它可以打破语言和平台的限制。
13.C#的优点是什么?至少列出4点
1.C#中指针已经消失. 允许对原始指针的有限制的使用.
2.基于.NET平台的,继承了自动内存管理和垃圾回收的特点.
3.C#拥有内建的支持来将任何组件转换成一个web service,运行在任何平台上的任何应用程序都可以通过互联网来使用这个服务.
4.面向对象的
14.面向对象编程的三大原则是什么?分别加以说明
?继承:都支持类的单一继承,但类可以实现多个接口。所有类都从一个公共的基类继承。
?封装与可见性:都可决定类成员是否可见。除了C#的internal访问修饰符外,两者可见性机制非常相似
?多态性:Java和C#都支持某些形式的多态性机制,且两者实现方法非常类似。
15.C#有哪5种类型的可访问性?
?public:成员可以从任何代码访问。
?protected:成员只能从派生类访问。
?internal:成员只能从同一程序集的内部访问。
?protected internal:成员只能从同一程序集内的派生类访问。
?private:成员只能在当前类的内部访问。
16.C#代码在执行前要编译为中间语言 ,中间语言的主要特征有?
● 面向对象和使用接口
● 值类型和引用类型之间的巨大差别
● 强数据类型
● 使用异常来处理错误
● 使用属性(attribute)
17.C#中引用类型有哪几种?
(类、代表、数组、接口)
18.对象间可能存在的三种关系?
聚合,一个(较复杂的)对象由其他若干(较简单的)对象作为其构成部分,称作聚合。
关联,对象之间的静态联系(即通过对象属性体现的联系)称作关联。
继承

编程题目
1.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。
2.写一个实现对一段字符串翻转的方法 。
class StringReversal
{
public String StrReversal(String oldString)
{
//Convert string to char arry
Char[] oldCharArray = oldString.ToCharArray();
//Reversal from zero
int index = 0;
int cLength = oldCharArray.Length - 1;
while(index<cLength)
{
//use char CTemp to swap
char cTemp = oldCharArray[index];
oldCharArray[index] = oldCharArray[cLength];
oldCharArray[cLength] = cTemp;
index ++;
cLength --;
}
//Convert char array to string only have the constructor method
string newString = new string(oldCharArray);
return newString;
}
}
3.实现一个冒泡排序算法?
public void BubbleSort(int[] R)
  {
   int i,j,temp; //交换标志
   bool exchange;
   for(i=0; i<R.Length; i++) //最多做R.Length-1趟排序
   {
   exchange=false; //本趟排序开始前,交换标志应为假
   for(j=R.Length-2; j>=i; j--)
   {
   if(R[j+1]<R[j]) //交换条件
   {
    temp=R[j+1];
    R[j+1]=R[j];
    R[j]=temp;
    exchange=true; //发生了交换,故将交换标志置为真
   }
   }
   if(!exchange) //本趟排序未发生交换,提前终止算法
   {
   break;
   }
   }
  }
4. 用拷贝的方法来创建数组
using System;
class Test
{ public static void Main(String []args)
{ int [] Array1=new int [5]{4,3,2,1,0};
int [] Array2=(int[])Array1.Clone();
//创建新数组但内容为Array1
for(int i=0; i<Array2.Length;i++)
{ //获得Array2[i]数组中的某个元素的值并显示出其值
Console.WriteLine("Array2[{0}]:{1}",i,Array2[i]);
}//显示的结果为 4、3、2、1、0
}
}
5.找最大数游戏:有一批数,请你快速地找出最大数及其位置。
6. 九九乘法表
static void Main(string[] args)
{ for(int i=1; i<10; i++)
{ for(int j=1; j<= i; j++)
{int s = i * j;
Console.Write(j.ToString() + "×" + i.ToString() + "=" + s.ToString() + " ");
}
Console.WriteLine("");
}
Console.ReadLine();
}
7.最大公约数
max_gongyue(int m,int n)
{
int i=min(m,n)-1;
for(;i>1;i--)
if((!(m%i))&&(!(n%i)))
break;
return i;
}
8.求数的阶乘
static void Main(string[] args)
{while(true)
{Console.Write("请输入一个正整数(输入0退出):");
int x = int.Parse(Console.ReadLine());
if (x == 0)
{break;}
int y = x;
checked
{ for(int i=x-1; i>0; i--)
{y = y * i;}
}
Console.WriteLine("{0}的阶乘是:{1}", x, y);
}
Console.WriteLine("按回车键退出...");
Console.ReadLine();
}
9.折半查找并显示进度
int BinarySearch(Type a[],const Type& x,int n)
{
int left=0;
int right=n-1;
while(left<=right){
int middle=(left+right)/2;
if (x==a[middle]) return middle;
if (x>a[middle]) left=middle+1;
else right=middle-1;
}
return -1;
}
10.四则运算题目
static void Main(string[] args)
{
Console.WriteLine("输入运算式");
for(int i=0;i<args.Length;i++)
{
Console.WriteLine("输入的参数{0}:{1}",i,args[i]);
}
double a,b;
double y=0;
a=double.Parse(args[0]);
b=double.Parse(args[2]);
switch(args[1])
{
case"+":
{
y=a+b;
break;
}
case"-":
{
y=a-b;
break;
}
case"*":
{
y=a*b;
break;
}
case"/":
{
if(b==0)
{
Console.WriteLine("除数不能为0");break;
}
else{y=a/b;break;}
}

}
Console.WriteLine("结果为:{0}",y);
11.判断彩票是否中奖
输入一组数字(7位),判断这组数字中几等奖,判断规则如下
一等奖:中7个数;二等奖:中6个数
三等奖:中5个数;四等奖:中4个数;五等奖:中3个数
其它的没有中奖
最终打印出中几等奖,如中一等奖打印“一等奖”,没有中奖打印“没有中奖”
注:中奖号码为已知,可以自定义一组整型数组,如:
int [] luck = new int[7];
luck[0] = 0;luck[1] = 1;luck[2] = 2;luck[3] = 3;luck[4] = 4;luck[5] = 5;luck[6] = 6;

如果你的简历上面写“熟悉/了解C#”,那么你就应该能够回答下面的这些基础问题。我将给出自己的简要答案以供参考。欢迎讨论。

  1. 传入某个属性的set方法的隐含参数的名称是什么?
    value,它的类型和属性所声名的类型相同。

  2. 如何在C#中实现继承?
    在类名后加上一个冒号,再加上基类的名称。

  3. C#支持多重继承么?
    类之间不支持,接口之间支持。类对接口叫做实现,不叫继承。

  4. 被protected修饰的属性/方法在何处可以访问?
    在继承或间接继承与这个类的子类中可以访问。

  5. 私有成员会被继承么?
    会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了。

  6. 请描述一下修饰符protected internal
    在同一个Assembly中,他的访问级别和public一样,而跨Assembly访问时,他的访问级别同protected一样。即protected的范围 + internal的范围。

  7. C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数?
    两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。

  8. C#中所有对象共同的基类是什么?
    System.Object.

  9. 重载和覆写有什么区别?
    重载提供了对一个方法签名的不同参数调用的实现。覆写提供了子类中改变父类方法行为的实现。

  10. 在方法定义中,virtual有什么含意?
    被virtual修饰的方法可以被子类覆写。

  11. 能够将非静态的方法覆写成静态方法么?
    不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。

  12. 可以覆写私有的虚方法么?
    不可以,甚至子类中无法访问父类中的私有方法。

  13. 能够阻止某一个类被其他类继承么?
    可以,使用关键字sealed。

  14. 能够实现允许某个类被继承,但不允许其中的某个方法被覆写么?
    可以,标记这个类为public,并标记这个方法为sealed。

  15. 什么是抽象类(abstract class)?
    一种不可以被实例化的类。抽象类中一般含有抽象方法,当然也可有具体实现。继承类只有实现过所有抽象类的抽象方法后才能被实例化。

  16. 何时必须声明一个类为抽象类?
    当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。

  17. 接口(interface)是什么?
    只含有共有抽象方法(public abstract method)的类。这些方法必须在子类中被实现。

  18. 为什么不能指定接口中方法的修饰符?
    接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。他们默认为公有方法。

  19. 可以继承多个接口么?
    当然。

  20. 那么如果这些接口中有重复的方法名称呢?
    这种情况中你可以决定如何实现。当然需要特别得小心。但是在编译环节是没有问题的。

  21. 接口和抽象类的区别是什么?
    接口中所有方法必须是抽象的,并且不能指定方法的访问修饰符。抽象类中可以有方法的实现,也可以指定方法的访问修饰符。

  22. 如何区别重载方法?
    不同的参数类型,不同的参数个数,不同的参数顺序。

  23. const和readonly有什么区别?
    const可以用于局部常量,而readonly,实际是类的initonly字段,显然不能是局部的。

  24. System.String 和System.StringBuilder有什么区别?
    System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法。
分享到:
评论

相关推荐

    计算机专业Java专业课程实验+CRM客户关系管理系统设计学生课程实验.zip

    学生课程实验:大二计算机专业JAVA专业课的课程实验,设计一个CRM的客户关系管理系统,含项目源码、数据库、以及汇报PPT。 内容目录: ├── readme.txt ├── 基于Java的CRM客户关系管理系统的设计和实现数据库 │ └── crm.sql ├── 基于Java的CRM客户关系管理系统的设计和实现项目源代码 │ └── MyCrm.zip ├── 基于Java的CRM客户关系管理系统的设计和实现项目运行截图 │ ├── 主界面.PNG │ ├── 产品信息管理.PNG │ ├── 客户信息添加.PNG │ ├── 登录.PNG │ └── 角色管理.PNG ├── 视频 │ ├── 1CRM客户关系管理系统_项目的配置以及启动.url │ ├── 2CRM客户关系管理系统_工作桌面_信息中心_邮箱功能_客户管理_订单管理.url │ └── 3CRM客户关系管理系统_财务管理_产品管理_部门管理_岗位管理_数据回收站_权限管.url └── 论文 ├── 基于Java的现代数字化CRM客户关系管理系统答辩ppt.pptx

    node-v12.17.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    常见移动变现术语(mobile monetization).docx

    常见移动变现术语(mobile monetization).docx

    废物转运站:决策指南 垃圾转运站:决策指南

    废物转运站:决策指南

    冰蓄冷的一些资料.zip

    冰蓄冷的一些资料:包括系统的原理图,设计计算等

    8. Django 表单与模型

    配套资源

    【蓝桥杯嵌入式】第七届省赛 - 模拟液位检测告警系统

    开源 【蓝桥杯嵌入式】第七届省赛 - 模拟液位检测告警系统

    基于matlab-gmm-dtw的说话人识别源码.zip

    本代码是基于DTW(动态时间规则)算法以及GMM(混合高斯模型)进行的说话人识别的程序。 现在大部分的说话人识别模型是基于MFCC的混合高斯模型设计的,但基于此的识别方式会受说话人之间相互模仿的影响,所以增加了一种特征参数,基音周期。 基因周期包含了语音频率结构信息,不易模仿。同时若直接对高斯混合模型进行解混会使识别速度很慢,所以先用DTW再用GMM可以极大地缩减识别时间。 注意:此代码仅为说话人识别代码,如需进行语音文件录制请自行添加面。 为了使使用更加条理清晰,建议后续添加说话人按照freespeech中已经建成的文件夹为模板并分类存放说话人语音文件,将对应说话人的语音文件保存在对应的文件夹中。 此建议仅为使使用者更加条理清晰,语音文件也可直接存放在freespeech文件夹中。 确认电脑安装配置了voicebox后,直接运行test4.m文件,会出现gui界面,接下来的操作,根据界面提示进行即可。 重新训练数据库,可在上述运行界面中删除数据库后重新训练即可,也可只知删除部分人的数据。 程序使用许先建立数据库。录制的语音时间太长会使程序生成数据库和数据比对的时间加长,请耐

    Honeywell BR-310 条形码扫描器手册

    Honeywell BR-310 条形码扫描器手册

    QT6实现的附带文件传输协议的串口终端

    QT6实现的附带文件传输协议的串口终端 QT6实现的附带文件传输协议的串口终端

    unity开发入门教程.zip

    Unity是一个流行的跨平台游戏开发引擎,它允许开发者使用C#等语言创建2D和3D游戏。以下是一个Unity开发的基本入门教程: 1. 安装Unity 首先,你需要从Unity的官方网站下载并安装Unity Hub和Unity编辑器。Unity Hub是一个用于管理Unity版本和项目的工具。 2. 创建新项目 打开Unity Hub,点击“New”来创建一个新项目。选择你需要的Unity版本、模板(例如2D或3D)和其他设置。 3. 熟悉Unity界面 Unity的界面主要由以下几个部分组成: Hierarchy:显示场景中的所有游戏对象。 Project:显示项目的所有资源,如场景、模型、材质、脚本等。 Inspector:显示当前选中游戏对象的详细信息和属性。 Scene:显示当前场景的3D视图,你可以在这里编辑游戏对象。 Game:显示游戏运行时的视图。

    基于MobileFaceNet的静默活体检测系统的设计与实现python源码+项目说明+模型.zip

    基于MobileFaceNet的静默活体检测系统的设计与实现python源码+项目说明+模型.zip 1、代码 2、实验环境 Windows 10(64位) CPU:AMD Ryzen 7 5800H RAM:16G GPU:NVIDIA RTX3060 开发工具:IntelliJ IDEA以及PyCharm 相关配置及版本: Chrome 90.0.4430.212 SpringBoot 2.2.6 Java JDK8 MyBatis 2.1.1 Mysql 8.0.25 Python 3.8 pytorch 1.7.1 torchvision 0.8.2 numpy 1.18.5 tensorboard 2.4.1 pandas 1.2.3 cuda 11.0.2 cudnn 11.2 torch 1.8.1 torchvision 0.9.1 3、模型训练命令 python train.py 4、模型测试命令 python test.py 5、运行检测模块命令 python detect.py --source 0

    金融产品营销方案设计33.docx

    金融产品营销方案设计33.docx

    识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip

    识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip

    Mysql数据库实战教程&案例&相关项目

    MySQL数据库作为一个广泛使用的开源关系型数据库管理系统,它在Web开发、数据管理和企业级应用中扮演着重要角色。以下是对MySQL数据库实战教程、案例及相关项目的描述: MySQL数据库实战教程: 教程目的:教程旨在教授学习者如何高效地使用MySQL进行数据存储、查询、更新和管理。通过实战案例,学习者将掌握数据库设计、SQL语言的高级应用、性能优化等关键技能。 核心内容: 数据库设计:学习关系型数据库的设计原则,包括实体关系模型、规范化理论等。 SQL语言:深入理解SQL语句的编写,包括数据的增删改查(CRUD)操作。 数据类型与索引:掌握MySQL支持的数据类型以及如何设计索引以提高查询效率。 存储引擎:了解不同的存储引擎如InnoDB、MyISAM的特性及其适用场景。 性能优化:学习如何分析查询性能并进行优化,包括查询重写和数据库调优。 实战案例: 案例一:电商数据库管理:设计一个电商网站的数据库,实现商品展示、用户登录、购物车管理等功能。 案例二:金融交易系统:构建一个金融交易数据库,模拟交易记录的存储和查询,包括实时数据分析。 案例三:社交网络平台:开发一个社交网络

    b0900febba0972d39e8ab81732d7a34c.mp3

    b0900febba0972d39e8ab81732d7a34c.mp3

    Vision Transformer 网络对7种小麦叶片病害分类,包含训练权重和数据集、迁移学习

    1.网络使用的是Transformer 网络中的 ViT 模型 2.数据集是7分类的小麦叶片病害(水泡,褐色斑点) 3.网络训练的过程中,会对数据集的训练集图像求取灰度值的均值和方差,预处理处理包括随机裁剪、中心裁剪等等。网络初始化会自动载入ViT 官方的预训练权重(transformer网络收敛很慢,不经过预训练效果会很差,因此本篇代码自动载入) 4.train.py 会自动生成数据集类别的 json 文件,所以不需要自己定义。train.py 训练完成会生成训练集的loss、测试集的loss,训练集的accuracy、测试集的accuracy,并生成对应的曲线保存至run_results文件内。训练完成会计算训练集和测试集的混淆矩阵,计算召回率、特异度啥的 5.预测代码是predict.py,只需要将待预测的图像放在inference文件夹下,代码会自动将该文件下所有的图像进行预测,并在原图像左上角写入最大的前三个类别和概率 【如果想要训练自己的数据集,参考README文件】 【本项目测试了30个epoch,准确率为0.88,网络未收敛,加大轮次可以增加精度】

    惠普服务器安装说明

    惠普服务器安装说明

    python学习导航.txt

    python烟花代码

    node-v12.10.0-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics