这些题目都来源于网络,参考之前的答案,针对每道题做了简单的分析,恳请大家批评指正。
1. 简述 private、
protected、 public、 internal 修饰符的访问权限。
答:本题考察 类的成员的可访问性。
可访问性的关键字有如下5个:
internal:在所属程序集中可以访问。
private:私有成员,
在当前类中可以访问。
protected:保护成员,在当前类及其子类中可以访问。
public:公共成员,完全公开,没有访问限制。
internal
protected:在所属程序集或当前类的子类中可以访问。(题目中未提及)
【扩展】
类的修饰符:abstract,sealed,static,unsafe 4个。
abstract:类是抽象的,不能创建类的实例
sealed:类是密封的,不能被继承
static:类是静态的,只有静态成员,没有非静态成员
unsafe:类有非安全的结构,比如指针
2 .列举ASP.NET
页面之间传递值的几种方式。
答:有 querystring,cookie,session,server.transfer,application 5种方式。
【扩展】
1.使用QueryString方式(或称url传值、Response.Redirect传值),这是最简单的方式,因为传递的值在浏览器的url中会显示出来,所以用来传递没有安全要求的值。
发送页面代码:
1
Response.Redirect(
"
index.aspx?username=
"
+
txtUserName.Text.Trim());
接收页面代码:
1
if
(Request.QueryString[
"
username
"
]
!=
null
)
2
{
3
strUserName
=
Request.QueryString[
"
username
"
];
4
}
2.使用cookie方式,cookie由服务器创建,但是保存在客户端
发送页面代码:
1
HttpCookie userName
=
new
HttpCookie(
"
username
"
);
2
userName.Value
=
this
.txtUserName.Text.Trim();
3
Response.Cookies.Add(userName);
4
Response.Redirect(
"
index.aspx
"
);
接收页面代码:
1
if
(Request.Cookies[
"
username
"
]
!=
null
)
2
{
3
strUserName
=
Request.Cookies[
"
username
"
].Value;
4
}
3.使用Session变量,session在用户向服务器发出首次请求时被创建,在服务器端,在用户关闭浏览器或异常发生时终止(还有别的session过期情况)。
发送页面代码:
1
Session[
"
username
"
]
=
this
.txtUserName.Text.trim();
2
Response.Redirect(
"
index.aspx
"
);
接收页面代码:
1
if
(Session[
"
username
"
]
!=
null
)
2
{
3
strUserName
=
Session[
"
username
"
].ToString();
4
}
4.使用Application变量
发送页面代码:
1
Application[
"
username
"
]
=
this
.txtUserName.Text.trim();
2
Response.Redirect(
"
index.aspx
"
);
接收页面代码:
1
if
(Application[
"
username
"
]
!=
null
)
2
{
3
strUserName
=
Application[
"
username
"
].ToString();
4
}
5.使用Server.Transfer方式(或称为HttpContext方式),要传递的变量可以通过属性或方法来获得,使用属性比较容易一些。
发送页面制作一个属性:
1
public
string
GetName
2
{
3
get
{
return
this
.txtUserName.Text.Trim(); }
4
}
发送页面代码:
1
Server.Transfer(
"
index.aspx
"
);
接收页面代码:
1
w
=
(WebForm4)Context.Handler;
2
strUserName
=
w.GetName;
3.重写、重载和隐藏三个概念的区别。
答:
重写(override)指用override关键字重新实现基类中的虚方法,在运行过程中,无论通过哪个类型的引用,真正对象类型的方法将被调用。
重载(overload)指多个方法共享一个名字并且拥有相同的返回值,但是拥有不同的参数。
隐藏(new)指用new关键字重新实现基类中的方法,在运行的过程中通过引用的类型判断应该调用哪个类型的方法。
【扩展】
重写实现的是运行时多态,重载实现的是编译时多态。
代码
1
public
class
FatherClass
2
{
3
public
virtual
void
Method()
4
{
5
Console.WriteLine(
"
FatherClass.Method
"
);
6
}
7
}
8
public
class
ChildClass : FatherClass
9
{
10
public
override
void
Method()
11
{
12
Console.WriteLine(
"
ChildClass.Method
"
);
13
}
14
}
15
public
class
NewClass:FatherClass
16
{
17
public
new
virtual
void
Method()
18
{
19
Console.WriteLine(
"
NewClass.Method
"
);
20
}
21
}
22
public
class
OverloadClass
23
{
24
public
void
MethodA()
25
{
26
Console.WriteLine(
"
MethodA:
"
);
27
}
28
public
void
MethodA(
string
str1)
29
{
30
Console.WriteLine(
"
MethodA:
"
+
str1);
31
}
32
public
void
MethodA(
string
str1,
string
str2)
33
{
34
Console.WriteLine(
"
MethodA:
"
+
str1
+
"
,
"
+
str2);
35
}
36
}
37
38
public
static
void
Main()
39
{
40
FatherClass fcOverride
=
new
ChildClass();
41
fcOverride.Method();
42
FatherClass fcNew
=
new
NewClass();
43
fcNew.Method();
44
45
OverloadClass oc
=
new
OverloadClass();
46
oc.MethodA();
47
oc.MethodA(
"
1
"
);
48
oc.MethodA(
"
1
"
,
"
2
"
);
49
}