1. internal关键字
解:internal 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的.
2. ASP.NET 页面之间传递值的几种方式
解:1. Querystring。
Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。
//1.创建一个web form //2.在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 //3.为button按钮创建click事件 //代码如下: private void Button1_Click(object sender, System.EventArgs e) { string url; url="webform2.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text; Response.Redirect(url); } //4.新建一个目标页面命名为webform2 //5.在webform2中放置两个Label1,Label2 //6.在webform2的Page_Load中添加如下代码: private void Page_Load(object sender, System.EventArgs e) { Label1.Text=Request.QueryString["name"]; Label2.Text=Request.QueryString["email"]; } //7.运行,即可看到传递后的结果了。
2. Session变量
使用Session变量传值是一种最常见的方式了,此中方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值removed后,变量才会消失。
//1、创建一个web form //2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 //3、为button按钮创建click事件 private void Button1_Click(object sender, System.EventArgs e) { Session["name"]=TextBox1.Text; Session["email"]=TextBox2.Text; Response.Redirect("webform2.aspx"); } //4、新建一个目标页面命名为webform2 //5、在webform2中放置两个Label1,Label2 //6.在webform2的Page_Load中添加如下代码: private void Page_Load(object sender, System.EventArgs e) { Label1.Text=Session["name"].ToString(); Label2.Text=Session["email"].ToString(); Session.Remove("name"); Session.Remove("email"); } //7.运行,即可看到传递后的结果了。
虽然这种方法有点复杂,但也不失为一种在页面传值的方式。
//1、创建一个web form //2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 //3、为button按钮创建click事件 private void Button1_Click(object sender, System.EventArgs e) { Server.Transfer("webform2.aspx"); } //4、创建过程来返回TextBox1,TextBox2控件的值代码如下: public string Name { get { return TextBox1.Text; } } public string EMail { get { return TextBox2.Text; } } //5.新建一个目标页面命名为webform2 //6.在webform2中放置两个Label1,Label2 //7.在webform2的Page_Load中添加如下代码: private void Page_Load(object sender, System.EventArgs e) { //创建原始窗体的实例 WebForm1 wf1; //获得实例化的句柄 wf1=(WebForm1)Context.Handler; Label1.Text=wf1.Name; Label2.Text=wf1.EMail; }
3. 简单的C#索引器举例
解:
// C#: INDEXER // Author: rajeshvs@msn.com using System; using System.Collections; class MyClass { private string[] data = new string[5]; public string this[int index] { get { return data[index]; } set { data[index] = value; } } } class MyClient { public static void Main() { MyClass mc = new MyClass(); mc[0] = "Rajesh"; mc[1] = "A3-126"; mc[2] = "Snehadara"; mc[3] = "Irla"; mc[4] = "Mumbai"; Console.WriteLine("{0},{1},{2},{3},{4}", mc[0], mc[1], mc[2], mc[3], mc[4]); } }
4. 用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
解:一般为3层。
数据访问层,业务逻辑层,表示层。
数据访问层:对数据库进行增删查改。
业务层:一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。
表示层:为了与用户交互。例如用户添加表单。
5. 什么叫应用程序域?
解:应用程序域(AppDomain)。可以理解成很多应用程序域都可以运行在同一个.NET的进程中,可以降低系统消耗,同时不同的域之间互相隔离,在安全性方面有保障。另外对于同一个进程内不同域之间的通信也相对简单一点。
AppDomainSetup info = new AppDomainSetup(); info.LoaderOptimization = LoaderOptimization.SingleDomain; AppDomain domain = AppDomain.CreateDomain("MyDomain", null, info); domain.ExecuteAssembly("C:\\test\\DomainCom.exe"); AppDomain.Unload(domain);
6. 什么是装箱和拆箱?
解:从值类型转换到引用类型--装箱。
从引用类型转换到值类型--拆箱。
7. .net中读写数据库需要用到那些类?他们的作用?
解:SqlDataAdapter , DataSet ,SqlCommand
//举例说明三个类的使用关系 private static DataSet SelectRows(DataSet dataset, string connectionString,string queryString) { using (SqlConnection connection = new SqlConnection(connectionString)) { SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(queryString, connection); adapter.Fill(dataset); return dataset; } }
8. ASP.net的身份验证方式有几种?
解:1. Windows Authentication,包括NTLM和Kerbros
2. Form Authentication。
3. Passport Authentication。需要安装Passport Software Developer Kit.这种认证方式适合于跨站之间的应用,用户只有一个用户名和密码可以访问任何成员站。
9. wsdl.exe的使用方式?
解:
wsdl http://hostServer/WebserviceRoot/WebServiceName.asmx?WSDL
(根据指定的XML Web Service生成一个.wsdl文件和以C#语言描述的客户端代理类)
wsdl /out:myProxyClass.cs http://hostServer/WebserviceRoot/WebServiceName.asmx
(根据指定的XML Web Service生成一个以C#语言描述的客户端代理类- myProxyClass.cs)
wsdl /language:VB /out:myProxyClass.vb http://hostServer/WebserviceRoot/WebServiceName.asmx
(根据指定的XML Web Service生成一个以VB语言描述的客户端代理类- myProxyClass.vb)
10. struct和class的区别?
解:
Struct` | Class | |
地址分配 | 栈 | 堆 |
效率 | 高 | 低 |
适合对象 | 小 | 大而复杂 |
类型 | 值类型 | 引用类型 |
拷贝时 | 创建新结构 | 复制引用 |
继承性 | 不可继承与被继承 | 可继承,可自定义(sealed) |
11. abstract class和interface有什么区别?
解:
abstract class | interface | |
概念 | 抽象类型 | 协议 |
非静态数据成员 | 可有 | 不可有 |
方法默认行为 | 可有 | 不可有 |
与被继承类的关系 | is a | implement |
12. .try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
解:会执行,在return前执行。
13. C#反射即举例
解:
Reflection,中文翻译为反射。
这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型 (class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息。
(1)使用Assembly定义和加载程序集,加载在程序集清单中列出模块,以及从此程序集中查找类型并创建该类型的实例。
(2)使用Module了解包含模块的程序集以及模块中的类等,还可以获取在模块上定义的所有全局方法或其他特定的非全局方法。
(3)使用ConstructorInfo了解构造函数的名称、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetConstructors或 GetConstructor方法来调用特定的构造函数。
(4)使用MethodInfo了解方法的名称、返回类型、参数、访问修饰符(如pulic 或private)和实现详细信息(如abstract或virtual)等。使用Type的GetMethods或GetMethod方法来调用特定的方法。
(5)使用FiedInfo了解字段的名称、访问修饰符(如public或private)和实现详细信息(如static)等,并获取或设置字段值。
(6)使用EventInfo了解事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等,添加或移除事件处理程序。
(7)使用PropertyInfo了解属性的名称、数据类型、声明类型、反射类型和只读或可写状态等,获取或设置属性值。
(8)使用ParameterInfo了解参数的名称、数据类型、是输入参数还是输出参数,以及参数在方法签名中的位置等。
//************************************************ //Model程序集 //************************************************ using System; using System.Collections.Generic; using System.Text; namespace Model { public class UserInfo { private int userId; public int UserId { get { return userId; } set { userId = value; } } private string userName; public string UserName { get { return userName; } set { userName = value; } } public void Show() { Console.WriteLine("UserId:" + userId + ", UserName:" + userName); } } } //************************************************ //反射操作类 //************************************************ using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace ObjectLoader { public class ShowObject { //加载程序集 private Assembly assembly = Assembly.Load("Model"); /// <summary> /// 实例化类,要包含它的命名空间 /// </summary> /// <param name="objName">类名</param> /// <returns></returns> public object LoadObject(string objName) { return assembly.CreateInstance("Model." + objName); } /// <summary> /// 返回所有的公共属性 /// </summary> /// <param name="obj"></param> /// <returns></returns> public PropertyInfo[] GetPropertys(object obj) { Type type = obj.GetType(); PropertyInfo[] infos = type.GetProperties(); return infos; } /// <summary> /// 设置实例的指定属性值 /// </summary> /// <param name="obj">实例</param> /// <param name="property">属性名</param> /// <param name="value">值</param> public void SetPropertyValue(object obj, string property, object value) { Type type = obj.GetType(); PropertyInfo info = type.GetProperty(property); if (info != null) { info.SetValue(obj, value, null); } } /// <summary> /// 返回指定属性值 /// </summary> /// <param name="obj">实例</param> /// <param name="property">属性名</param> /// <returns></returns> public object GetPropertyValue(object obj, string property) { Type type = obj.GetType(); PropertyInfo info = type.GetProperty(property); if (info == null) { return null; } return info.GetValue(obj, null); } /// <summary> /// 执行实例的指定方法 /// </summary> /// <param name="obj"></param> /// <param name="methodName">方法名</param> public void ExecuteMethod(object obj, string methodName) { Type type = obj.GetType(); MethodInfo info = type.GetMethod(methodName); if (info != null) { info.Invoke(obj, null); } } } } //************************************************ //测试类 //************************************************ using System; using System.Collections.Generic; using System.Text; using System.Reflection; using Model; using ObjectLoader; namespace ReflectionTest { class Program { static void Main(string[] args) { ShowObject showObj = new ShowObject(); object obj = showObj.LoadObject("UserInfo"); Console.WriteLine("实例名:" + obj.GetType().FullName); Console.WriteLine("实例的所有公共属性:"); PropertyInfo[] pInfos = showObj.GetPropertys(obj); foreach (PropertyInfo info in pInfos) { Console.WriteLine(info.GetType() + ":" + info.Name); } showObj.SetPropertyValue(obj, "UserId", 1); showObj.SetPropertyValue(obj, "UserName", "admin"); Console.WriteLine("设置属性值后的值"); Console.WriteLine("UserId:" + showObj.GetPropertyValue(obj,"UserId")); Console.WriteLine("UserName:" + showObj.GetPropertyValue(obj, "UserName")); Console.WriteLine("执行实例的方法:"); showObj.ExecuteMethod(obj, "Show"); } } }