• 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 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");
            }
        }
    }
  • 相关阅读:
    改变Ecplise项目窗口字体样式
    反射笔记
    日期、时间戳、字符串之间的转换
    Ajax处理后台返回的Json数据
    Ajax动态切换按钮
    生成随机数验证码
    Apache-SimpleEmail 简单应用
    Apache-POI 简单应用
    JavaMail API的应用
    checkbox怎么判断是否选中
  • 原文地址:https://www.cnblogs.com/awpatp/p/1522826.html
Copyright © 2020-2023  润新知