就业数据资源平台
当前位置:首页 > 笔试题目
笔试题目(综合版样题)


题记:一年一度的招聘黄金时间来临了,本人决定整理C#.Net的资料为本人和园子里的朋友共享!
C#资料(一)
1.静态成员和非静态成员的区别?
答:
静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等
示例:

using System;

using System.Collections.Generic;

using System.Text;

 

namespace Example01

{

    class Program

    {

        class Class1

        {

            public static String staticStr = "Class";

            public String notstaticStr = "Obj";

        }

        static void Main(string[] args)

        {

            //静态变量通过类进行访问,该类所有实例的同一静态变量都是同一个值

            Console.WriteLine("Class1's staticStr: {0}", Class1.staticStr);

 

            Class1 tmpObj1 = new Class1();

            tmpObj1.notstaticStr = "tmpObj1";

            Class1 tmpObj2 = new Class1();

            tmpObj2.notstaticStr = "tmpObj2";

 

            //非静态变量通过对象进行访问,不同对象的同一非静态变量可以有不同的值

            Console.WriteLine("tmpObj1's notstaticStr: {0}", tmpObj1.notstaticStr);

            Console.WriteLine("tmpObj2's notstaticStr: {0}", tmpObj2.notstaticStr);

 

            Console.ReadLine();

        }

    }

}



结果:
Class1's staticStr: Class
tmpObj1's notstaticStr: tmpObj1
tmpObj2's notstaticStr: tmpObj2


2.const 和 static readonly 区别?


答:const


用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序


static readonly


用 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化


示例:


测试类:



using System;

using System.Collections.Generic;

using System.Text;

 

namespace Example02Lib

{

    public class Class1

    {

        public const String strConst = "Const";

        public static readonly String strStaticReadonly = "StaticReadonly";

        //public const String strConst = "Const Changed";

        //public static readonly String strStaticReadonly = "StaticReadonly 

Changed";

    }

}

 

客户端代码:



using System;

using System.Collections.Generic;

using System.Text;

using Example02Lib;

 

namespace Example02

{

    class Program

    {

        static void Main(string[] args)

        {

            //修改Example02中Class1的strConst初始值后,只编译Example02Lib项目

            //然后到资源管理器里把新编译的Example02Lib.dll拷贝Example02.exe所在的目录,

执行Example02.exe

            //切不可在IDE里直接调试运行因为这会重新编译整个解决方案!!

 

            //可以看到strConst的输出没有改变,而strStaticReadonly的输出已经改变

            //表明Const变量是在编译期初始化并嵌入到客户端程序,而StaticReadonly是在运行时初始化的

            Console.WriteLine("strConst : {0}", Class1.strConst);

            Console.WriteLine("strStaticReadonly : {0}", Class1.strStaticReadonly);

 

            Console.ReadLine();

        }

    }

}



结果:
strConst : Const
strStaticReadonly : StaticReadonly


修改后的示例:


测试类:



using System;

using System.Collections.Generic;

using System.Text;

 

namespace Example02Lib

{

    public class Class1

    {

        //public const String strConst = "Const";

        //public static readonly String strStaticReadonly = "StaticReadonly";

        public const String strConst = "Const Changed";

        public static readonly String strStaticReadonly = "StaticReadonly Changed";

    }

}



结果


strConst : Const
strStaticReadonly : StaticReadonly Changed


3.extern 是什么意思?
答:extern 修饰符用于声明由程序集外部实现的成员函数经常用于系统API函数的调用(通过 DllImport )。注意,和DllImport一起使用时要加上 static 修饰符也可以用于对于同一程序集不同版本组件的调用(用 extern 声明别名)不能与 abstract 修饰符同时使用


示例:



using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.InteropServices;

 

namespace Example03

{

    class Program

    {

        //注意DllImport是一个Attribute Property,在System.Runtime.InteropServices命名空间中定义

        //extern与DllImport一起使用时必须再加上一个static修饰符

        [DllImport("User32.dll")]

public static extern int MessageBox(int Handle, string Message,


string Caption, int Type);



 

        static int Main()

        {

            string myString;

            Console.Write("Enter your message: ");

            myString = Console.ReadLine();

            return MessageBox(0, myString, "My Message Box", 0);
就业数据资源平台