- 相關(guān)推薦
新蛋科技.net工程方面的筆試題
1、 DataSet和DataReader的區(qū)別和相同點(diǎn),分別適合用于什么樣的情況?
答:
2、 有基類如下:
public class parent
{
public parent()
{
Console.Write(“Parent”);
}
}
請寫出一個(gè)子類Son,要求子類的構(gòu)造函數(shù)實(shí)現(xiàn)如下的功能:(1)輸出兒子的NAME、SEX、AGE、以及Parent,(2)要求在Son的構(gòu)造函數(shù)里不能有任何的命令語句出現(xiàn)。
public class parent
{
public parent()
{
Console.Write(“Parent”);
}
}
public class Son:parent
{ static string name=null;
static int sex=0;
static int age=0;
public parent(string name,int sex,int age):base()
{
name=name;
sex=sex;
age=age;
display();
}
publci void display()
{
Console.WriteLine(“name=”+name);
Console.WriteLine(“sex=”+sex);
Console.WriteLine(“age=”+age);
}
}
3、 請例舉出三種以上進(jìn)行頁面重定向的方式(包括服務(wù)端和客戶端)。
答: 第一種: Response.Redirect,
第二種: Server.Transfer
第三種:
function redirect(url) {
document.theForm.action = url;
document.theForm.submit();
}
第四種: StringBuilder sb=new StringBuilder();
sb.Append(“ ”);
Response.Write(sb.ToString());
4、 寫出禁用ViewState的語句。
答: Control(具體的某個(gè)控件).EnableViewState=false;
5、 請談一談.NET的code-behind模式和code_clude模式的區(qū)別,和各自的優(yōu)點(diǎn)及缺點(diǎn)。
6、 寫出下列七個(gè)程序段的輸出結(jié)果:
(1)
interface InFace
{
void fun();
}
class MyParent:InFace
{
public void fun()
{
Console.WriteLine(“Parent”);
}
}
class MySon:MyParent
{
public void fun()
{
Console.WriteLine(“Son”);
}
}
public class MyTest
{
public static void Main(string[] args)
{
InFace inf=new MySon();
inf.fun();
}
}
結(jié)果:Parent
(2)
interface InFace
{
void fun();
}
class MyParent:InFace
{
public new void fun()
{
Console.WriteLine(“Parent”);
}
}
class MySon:MyParent
{
public void fun()
{
Console.WriteLine(“Son”);
}
}
public class MyTest
{
public static void Main(string[] args)
{
InFace inf=new MySon();
inf.fun();
Console.Read();
}
}
結(jié)果:Parent
(3)
interface InFace
{
void fun();
}
class MyParent:InFace
{
public new void fun()
{
Console.WriteLine(“Parent”);
}
}
class MySon:MyParent
{
public new void fun()
{
Console.WriteLine(“Son”);
}
}
public class MyTest
{
public static void Main(string[] args)
{
InFace inf=new MySon();
inf.fun();
Console.Read();
}
}
結(jié)果:Parent
(4)
interface InFace
{
void fun();
}
class MyParent:InFace
{
public void fun()
{
Console.WriteLine(“Parent”);
}
}
class MySon:MyParent
{
public override void fun()
{
Console.WriteLine(“Son”);
}
}
public class MyTest
{
public static void Main(string[] args)
{
InFace inf=new MySon();
inf.fun();
Console.Read();
}
}
結(jié)果:語法錯誤: 無法重寫繼承成員“ConsoleApplication6.MyParent.fun()”,因?yàn)樗礃?biāo)記為 virtual、abstract 或 override
(5)
interface InFace
{
void fun();
}
abstract class MyParent:InFace
{
public virtual void fun()
{
Console.WriteLine(“Parent”);
}
}
class MySon:MyParent
{
public override void fun()
{
Console.WriteLine(“Son”);
}
}
public class MyTest
{
public static void Main(string[] args)
{
InFace inf=new MySon();
inf.fun();
Console.Read();
}
}
結(jié)果:Son
(6)
interface InFace
{
void fun();
}
class MyParent:InFace
{
public virtual void fun()
{
Console.WriteLine(“Parent”);
}
}
class MySon:MyParent
{
public override void fun()
{
Console.WriteLine(“Son”);
}
}
public class MyTest
{
public static void Main(string[] args)
{
InFace inf=new MySon();
inf.fun();
Console.Read();
}
}
結(jié)果:Son
(7)
interface InFace
{
void fun();
}
abstract class MyParent:InFace
{
public void fun()
{
Console.WriteLine(“Parent”);
}
}
class MySon:MyParent
{
public override void fun()
{
Console.WriteLine(“Son”);
}
}
public class MyTest
{
public static void Main(string[] args)
{
InFace inf=new MySon();
inf.fun();
Console.Read();
}
}
結(jié)果:語法錯誤: 無法重寫繼承成員“ConsoleApplication6.MyParent.fun()”,因?yàn)樗礃?biāo)記為 virtual、abstract 或 override
8、在.NET中有自動的垃圾回收機(jī)制,但是我們也可以顯示聲明類的析構(gòu)函數(shù),請寫出下列程序的輸出結(jié)果:像這個(gè)程序一樣我們顯示聲明類的析構(gòu)函數(shù),會有什么問題出現(xiàn)?
class Parent
{
public Parent()
{
Console.WriteLine(“Parent”);
}
~Parent()
{
Console.WriteLine(“Delete Parent”);
}
}
class Son:Parent
{
public Son():base()
{
Console.WriteLine(“Son”);
}
~Son()
{
Console.WriteLine(“Delete Son”);
}
}
public class MyTest
{
public static void Main(string[] args)
{
Son son=new Son();
}
}
結(jié)果:Parent
Son
Delete Son
Delete Parent
9、 按值傳遞和按引用傳遞各有什么特點(diǎn)。它們有什么區(qū)別?
答:在按值傳遞中,在被調(diào)方法中對變量所做的修改不會影響主調(diào)方法中的變量。
在按引用傳遞中,在被調(diào)方法中對變量所做的修改會反映到主調(diào)方法中的變量。
10、 寫出下更程序的輸出結(jié)果:
(1)public class MyTest
{
public static void Main(string[] args)
{
int i=10;
fun(i);
Console.WriteLine(“i=”+i);
Console.Read();
}
public static int fun(int a)
{
a++;
Console.WriteLine(“a=”+a);
return a;
}
}
結(jié)果:a=11
i=10
(2)
public static void Main(string[] args)
{
int i=10;
fun(out i);
Console.WriteLine(“i=”+i);
Console.Read();
}
public static int fun(out int a)
{
a++;
Console.WriteLine(“a=”+a);
return a;
}
結(jié)果:語法錯誤: 控制離開當(dāng)前方法之前必須對輸出參數(shù)“a”賦值
使用了未賦值的局部變量“a”
(3)
public class MyTest
{
public static void Main(string[] args)
{
int i=10;
fun(out i);
Console.WriteLine(“i=”+i);
Console.Read();
}
public static int fun(out int a)
{
a=12;
a++;
Console.WriteLine(“a=”+a);
return a;
}
}
結(jié)果:a=13
i=13
(5)
public class MyTest
{
public static void Main(string[] args)
{
int i=10;
fun(ref i);
Console.WriteLine(“i=”+i);
Console.Read();
}
public static int fun(ref int a)
{
a++;
Console.WriteLine(“a=”+a);
return a;
}
}
結(jié)果:a=11
i=11
附關(guān)于out參數(shù)的相關(guān)知識點(diǎn):
必須被賦值。
方法參數(shù)上的 out 方法參數(shù)關(guān)鍵字使方法引用傳遞到方法的同一個(gè)變量。當(dāng)控制傳遞回調(diào)用方法時(shí),在方法中對參數(shù)所做的任何更改都將反映在該變量中。
當(dāng)希望方法返回多個(gè)值時(shí),聲明 out 方法非常有用。使用 out 參數(shù)的方法仍然可以返回一個(gè)值。一個(gè)方法可以有一個(gè)以上的 out 參數(shù)。
若要使用 out 參數(shù),必須將參數(shù)作為 out 參數(shù)顯式傳遞到方法。out 參數(shù)的值不會傳遞到 out 參數(shù)。
不必初始化作為 out 參數(shù)傳遞的變量。然而,必須在方法返回之前為 out 參數(shù)賦值。
屬性不是變量,不能作為 out 參數(shù)傳遞。
如果兩個(gè)方法的聲明僅在 out 的使用方面不同,則會發(fā)生重載。不過,無法定義僅在 ref 和 out 方面不同的重載。例如,以下重載聲明是有效的:
class MyClass
{
public void MyMethod(int i) {i = 10;}
public void MyMethod(out int i) {i = 10;}
}
而以下重載聲明是無效的:
class MyClass
{
public void MyMethod(out int i) {i = 10;}
public void MyMethod(ref int i) {i = 10;}
}
與所有的 out 參數(shù)一樣,在使用數(shù)組類型的 out 參數(shù)前必須先為其賦值,即必須由接受方為其賦值。例如:
public static void MyMethod(out int[] arr)
{
arr = new int[10]; // definite assignment of arr
}
與所有的 ref 參數(shù)一樣,數(shù)組類型的 ref 參數(shù)必須由調(diào)用方明確賦值。因此不需要由接受方明確賦值?梢詫(shù)組類型的 ref 參數(shù)更改為調(diào)用的結(jié)果。例如,可以為數(shù)組賦以 null 值,或?qū)⑵涑跏蓟癁榱硪粋(gè)數(shù)組。例如:
public static void MyMethod(ref int[] arr)
{
arr = new int[10]; // arr initialized to a different array
}
下面的兩個(gè)示例說明 out 和 ref 在將數(shù)組傳遞給方法上的用法差異。
示例 1
在此例中,在調(diào)用方(Main 方法)中聲明數(shù)組 myArray,并在 FillArray 方法中初始化此數(shù)組。然后將數(shù)組元素返回調(diào)用方并顯示。
// cs_array_ref_and_out.cs
using System;
class TestOut
{
static public void FillArray(out int[] myArray)
{
// Initialize the array:
myArray = new int[5] {1, 2, 3, 4, 5};
}
static public void Main()
{
int[] myArray; // Initialization is not required
// Pass the array to the callee using out:
FillArray(out myArray);
// Display the array elements:
Console.WriteLine(“Array elements are:”);
for (int i=0; i < myArray.Length; i++)
Console.WriteLine(myArray[i]);
}
}
輸出
Array elements are:
1
2
3
4
5
示例 2
在此例中,在調(diào)用方(Main 方法)中初始化數(shù)組 myArray,并通過使用 ref 參數(shù)將其傳遞給 FillArray 方法。在 FillArray 方法中更新某些數(shù)組元素。然后將數(shù)組元素返回調(diào)用方并顯示。
// cs_array_ref_and_out2.cs
using System;
class TestRef
{
public static void FillArray(ref int[] arr)
{
// Create the array on demand:
if (arr == null)
arr = new int[10];
// Otherwise fill the array:
arr[0] = 123;
arr[4] = 1024;
}
static public void Main ()
{
// Initialize the array:
int[] myArray = {1,2,3,4,5};
// Pass the array using ref:
FillArray(ref myArray);
// Display the updated array:
Console.WriteLine(“Array elements are:”);
for (int i = 0; i < myArray.Length; i++)
Console.WriteLine(myArray[i]);
}
}
輸出
Array elements are:
123
2
3
4
1024
10、 怎樣從彈出窗口中刷新主窗口?
private void button1_Click(object sender, System.EventArgs e)
{
Form2 frm = new Form2();
try
{
frm.ShowDialog(this);
}
finally
{
frm.Dispose();
}
}
private void button1_Click(object sender, System.EventArgs e)
{
Form parent = this.Owner as Form;
if(parent != null)
parent.Refresh();
}
11、 Attribute的參數(shù)?
答:Attribute類的構(gòu)造函數(shù)沒有參數(shù),
AttributeUsageAttribute類指定另一特性類的用法,有一個(gè)參數(shù)
public AttributeUsageAttribute( AttributeTargets validOn);
12、 怎樣確定垃圾確實(shí)被回收了,調(diào)用了supressfinalize或collect方法就一定銷毀了對象嗎?顯示調(diào)用了析構(gòu)方法就一定銷毀了對象嗎?
答:垃圾回收 GC 類提供 GC.Collect 方法,您可以使用該方法讓應(yīng)用程序在一定程度上直接控制垃圾回收器,這就是強(qiáng)制垃圾回收。
Finalize 方法和析構(gòu)函數(shù)如何允許對象在垃圾回收器自動回收對象的內(nèi)存之前執(zhí)行必要的清理操作。
對于您的應(yīng)用程序創(chuàng)建的大多數(shù)對象,可以依靠 .NET Framework 的垃圾回收器隱式地執(zhí)行所有必要的內(nèi)存管理任務(wù)。但是,在您創(chuàng)建封裝非托管資源的對象時(shí),當(dāng)您在應(yīng)用程序中使用完這些非托管資源之后,您必須顯式地釋放它們。最常見的一類非托管資源就是包裝操作系統(tǒng)資源的對象,例如文件、窗口或網(wǎng)絡(luò)連接。雖然垃圾回收器可以跟蹤封裝非托管資源的對象的生存期,但它不了解具體如何清理這些資源。對于這些類型的對象,.NET Framework 提供 Object.Finalize 方法,它允許對象在垃圾回收器回收該對象使用的內(nèi)存時(shí)適當(dāng)清理其非托管資源。默認(rèn)情況下,F(xiàn)inalize 方法不執(zhí)行任何操作。如果您要讓垃圾回收器在回收對象的內(nèi)存之前對對象執(zhí)行清理操作,您必須在類中重寫 Finalize 方法。當(dāng)使用 C# 和 C++ 的托管擴(kuò)展以外的編程語言進(jìn)行開發(fā)時(shí),您可以實(shí)現(xiàn) Finalize 方法。C# 和托管擴(kuò)展提供析構(gòu)函數(shù)作為編寫終止代碼的簡化機(jī)制。析構(gòu)函數(shù)自動生成 Finalize 方法和對基類的 Finalize 方法的調(diào)用。在 C# 和托管擴(kuò)展編程語言中,您必須為終止代碼使用析構(gòu)函數(shù)語法
【新蛋科技.net工程方面的筆試題】相關(guān)文章:
.net面試題07-25
NET筆試題目11-06
.NET高頻筆試題11-16
ASP.NET筆試題小匯總02-12
NIIT .Net方向考試筆試題01-21
ASP.NET的一套筆試題02-12
迅雷2011.10.21筆試題08-10
中興2015筆試題08-02