1. String str=new String(“a”)和String str = "a"有什么区别?
String str = “a”; 这个只是一个引用,内存中如果有“a"的话,str就指向它,如果没有才创建,如果后还用到"a"这个字符串的话并且是这样用: String str1 = “a”; String str2 = “a”; String str3 = “a”; 这4个变量都共享一个字符串"a" 而String str = new String(“a”);是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str
2.判断字符串变量str是否为空的一下三种方法哪个性能更优
a、str= ="";b、str= =String.Empty;c、str.Length= =0;?答案是c;
3.string与String的区别
string、int是C#定义的类型,而String、Int32是.net类型即是CTS类型; string 是 .NET 框架中 System.String 的别名。string在编译的时候会转化为String类
4.虚方法(virtual )和抽象方法(abstract)的区别?
1:抽象方法仅有声明,而没有任何实现,如abstract someMethod();,虚方法却不能如此
virtual用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。
2:子类继承父类,可以对父类中的虚方法进行重写、覆盖、不处理三种处理(见5),对抽象方法却必须实现
5.子类对父类中虚方法的处理有重写(override)和覆盖(new),请说明它们的区别?
有父类ParentClass和子类ChildClass、以及父类的虚方法VirtualMethod。有如下程序段: ParentClass pc = new ChildClass();pc.VirtualMethod(…); 如果子类是重写(override)父类的VirtualMethod,则上面的第二行语句将调用子类的该方法,如果子类是覆盖(new)父类的VirtualMethod,则上面的第二行语句将调用父类的该方法
6.抽象类(abstract)和接口(interface)的区别
抽象类可以有自己的实现,接口却仅有声明,可以有自己的静态数据字段; java和C#中可以实现多个接口,却只能继承一个抽象类(或者非抽象类)(单继承,和c++的多继承不同);
7.填空:
(1)面向对象的语言具有 继承性、多态性、封装性。
(2)能用foreach遍历访问的对象需要实现 IEnumerable接口或声明GetEnumerator方法的类型。
(3)列举ADO.net中的五个主要对象
Connection,Command,DataReader,DataAdapter,DataSet
connection 连接对象 ;command 命令对象,指示要执行的命令和存储过程; datareader是一个向前的只读的数据流; dataadapter是功能强大的适陪器,支持增删改查的功能; dataset是一个数据级对象,相当与内存中的一张表或多张表。
8.不定项选择:
(1) 以下叙述正确的是:BC
A. 接口中可以有虚方法。 B. 一个类可以实现多个接口。
C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。
(2) 从数据库读取记录,你可能用到的方法有: BCD
A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader
9.简述 private、 protected、 public、 internal 修饰符的访问权限。
A.Private:关键字是一个成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结构体中才是可访问的, 同一体中的嵌套类型也可以访问那些私有成员
B.Protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。有关 protected 与其他访问修饰符的比较,请参见可访问性级别,只有在通过派生类类型发生访问时,基类的受保护成员在派生类中才是可访问的
C.Internal关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的
D Protected Internal 它可以看作是Protected与Internal的并集,意思是:如果是继承关系,无论在不在同一程序集里都能访问;如果不是继承关系,那么只能在同一程序集内访问。
E.Public具有最高级别的访问权限,对访问成员没有限制。
10.写出一条Sql语句:取出表A中第31到第40记录(SQLServer, 以自动增长的ID作为主键, 注意:ID可能不是连续的。)
解1: select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
11.列举ASP.NET页面之间传递值的几种方式。
1.使用QueryString, 如…id=1; response. Redirect()2.使用Session变量3.使用Server.Transfer
12.写出程序的输出结果
class Class1 {
private string str = "Class1.str";
private int i = 0;
static void StringConvert(string str) {
str = "string being converted.";
}
static void StringConvert(Class1 c) {
c.str = "string being converted.";
}
static void Add(int i) {
i++;
}
static void AddWithRef(ref int i) {
i++;
}
static void Main() {
int i1 = 10;
int i2 = 20;
string str = "str";
Class1 c = new Class1();
Add(i1);
AddWithRef(ref i2);
Add(c.i);
StringConvert(str);
StringConvert(c);
Console.WriteLine(i1);
Console.WriteLine(i2);
Console.WriteLine(c.i);
Console.WriteLine(str);
Console.WriteLine(c.str);
}
}
10;21;0;Str;string being converted.
13.写出程序的输出结果
public abstract class A
{
public A()
{
Console.WriteLine('A');
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
}
public class B: A
{
public B()
{
Console.WriteLine('B');
}
public new void Fun()
{
Console.WriteLine("B.Fun()");
}
public static void Main()
{
A a = new B();
a.Fun();
}
}
A B
A.Fun()
14.写出程序的输出结果:
public class A
{
public virtual void Fun1(int i)
{
Console.WriteLine(i);
}
public void Fun2(A a)
{
a.Fun1(1);
Fun1(5);
}
}
public class B : A
{
public override void Fun1(int i)
{
base.Fun1 (i + 1);
}
public static void Main()
{
B b = new B();
A a = new A();
a.Fun2(b);
b.Fun2(a);
}
}
2 5 1 6
15.一列数的规则如下: 1、1、2、3、5、8、13、21、34…求第30位数是多少, 用递归算法实现。
public class MainClass{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0) {
return 0;
}
else if(i > 0 && i <= 2) {
return 1;
}
else{
return Foo(i -1) + Foo(i - 2);
}
}
}
16.程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求: 1.要有联动性,老鼠和主人的行为是被动的。2.考虑可扩展性,猫的叫声可能引起其他联动效应。
要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分) <2>从Mouse和Master中提取抽象(5分) <3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)
public interface Observer {
void Response(); //观察者的响应,如是老鼠见到猫的反映
}
public interface Subject {
void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
}
public class Mouse : Observer {
private string name;
public Mouse(string name, Subject subj) {
this.name = name; subj.AimAt(this);
}
public void Response() {
Console.WriteLine(name + " attempt to escape!");
}
}
public class Master : Observer {
public Master(Subject subj) {
subj.AimAt(this);
}
public void Response() {
Console.WriteLine("Host waken!");
}
}
public class Cat : Subject {
private ArrayList observers; public Cat() {
this.observers = new ArrayList();
}
public void AimAt(Observer obs) {
this.observers.Add(obs);
}
public void Cry() {
Console.WriteLine("Cat cryed!");
foreach (Observer obs in this.observers) {
obs.Response();
}
}
}
class MainClass {
static void Main(string[] args) {
Cat cat = new Cat();
Mouse mouse1 = new Mouse("mouse1", cat);
Mouse mouse2 = new Mouse("mouse2", cat);
Master master = new Master(cat); cat.Cry();
}
}
//-------------设计方法二: 使用event -- delegate设计..//
public delegate void SubEventHandler();
public abstract class Subject {
public event SubEventHandler SubEvent;
protected void FireAway() {
if (this.SubEvent != null) {
this.SubEvent();
}
}
}
public class Cat : Subject {
public void Cry() {
Console.WriteLine("cat cryed.");
this.FireAway();
}
}
public abstract class Observer {
public Observer(Subject sub) {
sub.SubEvent += new SubEventHandler(Response);
}
public abstract void Response();
}
public class Mouse : Observer {
private string name;
public Mouse(string name, Subject sub) : base(sub) {
this.name = name;
}
public override void Response() {
Console.WriteLine(name + " attempt to escape!");
}
}
public class Master : Observer {
public Master(Subject sub) : base(sub){}
public override void Response() {
Console.WriteLine("host waken");
}
}
class Class1 {
static void Main(string[] args) {
Cat cat = new Cat();
Mouse mouse1 = new Mouse("mouse1", cat);
Mouse mouse2 = new Mouse("mouse2", cat);
Master master = new Master(cat); cat.Cry();
}
}
17. A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程.请附code
public class TestB {
public TestB(){
Console.Write("begin create B object"r"n");
}
TestB() {
Console.Write("begin destory B object"r"n");
}
}
public class TestA : TestB{
public TestA(){
Console.Write("begin create A object"r"n");
}
TestA() {
Console.Write("begin destory A object"r"n");
}
}
18…Net中读写数据库需要用到哪些类?他们的作用
sqlconnection 连接数据库;sqlcommand 执行T-SQL语句,或存储过程;SQLdatareader读取数据;dataadapter是dataset与数据源之间的桥梁;dataset把从数据库中所查询的数据保留起来,是一个数据级对象,相当与内存中的一张表或多张表。
19.ASP.net的身份验证方式有哪些?分别是什么原理?
asp.net提供了3种认证方式: windows身份验证, Forms验证和Passport验证.
windows, 身份验证:IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问.
Forms验证:用Cookie来保存用户凭证,并将未经身份验证的用户重定向到自定义的登录页.
Passport验证:通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录和核心配置文件服务.
20.解释一下UDDI、WSDL的意义及其作用。
UDDI(Universal Description, Discovery and Integration)统一描述、发现和集成协议,是为解决Web服务的发布和发现问题而制订的新一代基于Internet的电子商务技术标准。它包含一组基于Web的、分布式的Web服务信息注册中心的实现标准,以及一组使企业能将自己提供的Web服务注册到该中心的实现标准。
UDDI利用SOAP消息来查找和注册Web服务。并为应用程序提供了一系列接口来访问注册中心。
具体是:
1、UDDI 指的是通用描述、发现与集成服务
2、UDDI 是一种用于存储有关 web services 的信息的目录。
3、UDDI 是一种由 WSDL 描述的 web services 界面的目录。
4、UDDI 经由 SOAP 进行通信
5、UDDI 被构建入了微软的 .NET 平台
UDDI 规范帮助我们解决的问题:
1、使得在成百万当前在线的企业中发现正确的企业成为可能
2、定义一旦首选的企业被发现后如何启动商业
3、扩展新客户并增加对目前客户的访问4、扩展销售并延伸市场范围
5、满足用户驱动的需要,为在全球 Internet 经济中快速合作的促进来清除障碍
WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。
WSDL的作用:
Web services 可把您的应用程序转换为 web 应用程序。通过使用 XML,可以在应用程序间传送消息。最大的意义就是不管你使用什么的语言编写的WEB应用,只要有WSDL,便可以自由的调用!