ASP.NET知识点的明晰,非原创,东拼西凑的,向这些内容的原创者致敬

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.运行,即可看到传递后的结果了。

3. Server.Transfer

虽然这种方法有点复杂,但也不失为一种在页面传值的方式。

//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 classinterface
概念抽象类型协议
非静态数据成员可有不可有
方法默认行为可有不可有
与被继承类的关系is aimplement

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");
        }
    }
}