• 最近一个星期的学习,比较杂乱


    最近一个星期看了一个网站关于.net学习网(http://www.lmwlove.com/)中C#版面的所有文章。把自己不是很明白的地方都标注了,之前没有注意到的地方也标注了。

    今天就把这些整理后的弄上来。留作日后参考。

    1. const 字段只能在该字段的声明中初始化。

    readonly 字段可以在声明或构造函数中初始化。因此,

    根据所使用的构造函数,readonly 字段可能具有不同的

    值。
    2. const 字段是编译时常数,而 readonly 字段可用于

    运行时常数。
    3. const 默认就是静态的,而 readonly 如果设置成静

    态的就必须显示声明。
    4.const 对于引用类型的常数,可能的值只能是

    string 和 null。readonly可以是任何类
    数组有很多的优点,比如说数组在内存中是连续存储的,

    所以它的索引速度是非常的快,而且赋值与修改元素也很

    简单
    5. ArrayList不是类型安全的。既使我们保证在插入数据的

    时候都很小心,都有插入了同一类型的数据,但在使用的

    时候,我们也需要将它们转化为对应的原类型来处理。这

    就存在了装箱与拆箱的操作,会带来很大的性能损耗。
    而List类是ArrayList类的泛型等效类。它的大部分用法

    都与ArrayList相似,因为List类也继承了IList接口。

    最关键的区别在于,在声明List集合时,我们同时需要

    为其声明List集合内数据的对象类型。

    6.堆和栈的区别?
    答:栈是编译期间就分配好的内存空间,因此你的代码中

    必须就栈的大小有明确的定义;堆是程序运行期间动态分

    配的内存空间,你可以根据程序的运行情况确定要分配的

    堆内存的大小

    7. 值类型和引用类型的区别?
    答:值类型的值是存放在堆栈中的,改变其值,不改变变

    量原有的值,而引用类型的值是存放在栈中的,其引用的

    地址是存放在堆栈中的,改变其值也就改变了变量原有的

    值。值类型不允许包含null值,然而可空类型可以将

    null赋值给值类型l。

    8. ASP.net的身份验证方式有哪些?
    答:windows,forms,passport

    9.Heap与stack的差别?
    答:Heap是堆,空间是由手动操作分配和释放的,它的

    存储区很大的自由存储区。
    Stack是栈,是由是操作系统自动分配和释放的,栈上的

    空间是有限的。程序在编译期间变量和函数分配内存都是

    在栈上进行的,且在运行时函数调用时的参数的传递也是

    在栈上进行的。

    10. 今天看到有朋友在群里讨论i++与++i的区别,这里小编

    发表一些自己对于两者区别的解释。
    i--与--i的区别和i++与++i的区别是一样的,我们理解

    了i++与++i的区别,同样也就理解了i--与--i的区别.

    计算上的区别:
    i++ 先计算,再将i自身的值+1。
    ++i 先将i自身的值加+1,再参与计算。

    我们来看一个示例:
    static void Main(string[] args)
    {
        int i = 2;
        int j = i + (i++);
        Console.WriteLine(j);
        Console.WriteLine(i);
    }

    这个打印出来会是什么结果呢?读者可以先根据自己的理

    解算出打印值来,我们再来分析。

    根据我们上面的讲解,i++,是先计算,然后再将自身的

    值+1,那么上面的示例实际上就是:
    static void Main(string[] args)
    {
        int i = 2;
        int j = i+i;
        int i=i+1;
        Console.WriteLine(j);
        Console.WriteLine(i);
    }

    打印出来的结果应该就是
    4
    3

    测试,结果正确!


    我们再来看看++i的示例:
    static void Main(string[] args)
    {
        int i = 2;
        int j = i + (++i);
        Console.WriteLine(j);
        Console.WriteLine(i);
    }

    前面有讲过,++i,是先将i自身的值加+1,再参与计算,

    那么上面的示例实际上就是:
    static void Main(string[] args)
    {
        int i = 2;
        int i=i+1;
        int j = i+i;
        Console.WriteLine(j);
        Console.WriteLine(i);
    }

    那打印出来的结果应该就是:
    5
    3

    测试,结果正确!


    我们理解了i++与++i的实际运算过程,那么i++与++i究

    竟有没有本质上的区别的呢?

    本质上的区别:
    ++i不会产生临时对象
    i++在返回时会有一个临时对象的创建
    所以,在++i和i++ 效果相同的时候,最好使用++i

    11.性能上的区别:
    静态方法效率要稍微高一些,但是它会常驻内存,占用内

    存空间,而动态方法在调用完后会自动释放,节省内存空

    间。

    什么情况下使用动态方法,什么情况下使用静态方法:
    1,使用静态方法是有好处的,因为静态方法只维护一份拷

    贝,所以无论你有多少个实例,内存中都只会有一份拷贝



    2,使用频繁的方法用静态方法,比如数据库操作类,我们

    就是使用静态方法。使用的少的方法用动态的。因为静态

    的速度快,但占内存,就像是缓存一样,经常用的数据我

    们应该应该将它们缓存起来。动态方法的调用速度相对慢

    些,但调用完后,会立即释放类,节省内存。


    12.概念:
    1.值类型:
    数据存储在内存的堆栈中,从堆栈中可以快速地访问这些

    数据,因此,值类型表示实际的数据。

    2.引用类型:
    表示指向存储在内存堆中的数据的指针或引用(包括类、

    接口、数组和字符串)。

    区别:
    基本区别在于它们在内存中的存储方式。值类型将值存放

    在内存中,这些值类型都存储在堆栈中。原始数据类型(

    如bool和int)都属于此类型。而引用类型的内存单元中

    只存放内存堆中对象的地址,而对象本身放在内存堆中。

    如果引用的值类型的值是null,则表示未引用任何对象



    总结:
    存放内容:值类型为实际值,引用类型为一个引用
    存放地址:值类型为内联(堆栈),引用类型为堆
    默认值:值类型为0,引用类型为空
    传递参数:值类型为复制值,引用类型为复制引用
    13.
    、System.Text.Encoding.Default.GetBytes(变量)
       字码转换 转为比特码
          如:byte[] bytStr =

    System.Text.Encoding.Default.GetBytes(str);
       然后可得到比特长度:
          len = bytStr.Length;

    14.
    String user_IP=Request.ServerVariables

    ["REMOTE_ADDR"].ToString();
        取远程用户IP地址
    15.
    穿过代理服务器取远程用户真实IP地址:
       if(Request.ServerVariables["HTTP_VIA"]!

    =null){
          string  user_IP=Request.ServerVariables

    ["HTTP_X_FORWARDED_FOR"].ToString();
         }else{
          string  user_IP=Request.ServerVariables

    ["REMOTE_ADDR"].ToString();
        }
    16.
    char.IsWhiteSpce(字串变量,位数)——逻辑型
        查指定位置是否空字符;
        如:
        string str="中国  人民";
        Response.Write(char.IsWhiteSpace(str,2));

    //结果为:True, 第一个字符是0位,2是第三个字符。

    17、char.IsPunctuation('字符')  --逻辑型
        查字符是否是标点符号
       如:Response.Write(char.IsPunctuation('A'));  

     //返回:False

    18、(int)'字符'
        把字符转为数字,查代码点,注意是单引号。
        如:
        Response.Write((int)'中');   //结果为中字的

    代码:20013

    19、(char)代码
        把数字转为字符,查代码代表的字符。
       如:
       Response.Write((char)22269);   //返回“国”字



    取扩展名请使用
    System.IO.Path.GetExtension

    (this.mes_pic.PostedFile.FileName)

    不能继承System.Web.UI.Page 的Cache使用:
    HttpContext.Current.Cache


      装箱:为了将一个值类型转换为一个引用类型,就要使

    用一种叫装箱的机制。Int32 a=5;Object o=a;

       对值类型的装箱时内部发生的事情如下:

    1,首先在托管堆中分配内存,大小为值类型字段所需内

    存量加上额外成员(类型对象指针和同步索引块)大小。

    2,值类型字段复制到新分配的堆内存。

    3,返回对象的引用。

      拆箱:首先,拆箱不是装箱的逆过程,它其实是获取一

    个指针的过程,指针指向一个对象中的原始值类型。

        拆箱之后,紧接着是字段的复制过程。

    在对一个对象拆箱的时候,只能将其转化为原来未装箱的

    值类型。例如:Int32 x=5; Object o=x; Int16 y=

    (Int16)o;

    这时候就会发生异常。可以这样来写:Int16 y=

    (Int16)(Int32)o;必须首先转化为原来的类型

  • 相关阅读:
    Java读写文本文件操作
    java常用的文件读写操作
    CentOS yum 源的配置与使用
    每天一个linux命令目录
    Linux的概念与体系
    linux ACL权限规划:getfacl,setfacl使用
    基于大数据的电影网站项目开发之HBase分布式安装(四)
    基于大数据的电影网站项目开发之阶段性总结(三)
    基于大数据的电影网站项目开发之Hadoop2.6.0伪分布式设置(二)
    基于大数据的电影网站项目开发之CentOS的安装(一)
  • 原文地址:https://www.cnblogs.com/qishiguilai/p/basedknowledge.html
Copyright © 2020-2023  润新知