基础笔记 一 基本概念

Posted 海龟123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础笔记 一 基本概念相关的知识,希望对你有一定的参考价值。

. 程序集和命名空间的概念

(1)bin文件引用的是程序集,using 引用的是命名空间

(2)一个程序集中包含很多命名空间(一个命名空间也可以包含很多程序集,但通常不这么用),命名空间的名字通常是程序集的名字或者 程序集.文件夹如下图:

我们说的程序集其实就是类库

 

 2. 常使用的快捷键

ctrl+M ,ctrl+O 收缩代码,只对后台代码有效

ctrl+k+d ,对齐代码

f12 ,代码定位

f1,在线的MSDN帮助

prop 按两下tab,快速打属性字段

3. 调试窗口:运行时才有效

(1),即时窗口

(2),添加监视

 (3)快捷键F12可快速跳转到定义,Ctrl 加 - (减号)可跳转回原来的位置。

 

4. 类型转换

(1)值类型之间的转换

隐式转换:小类型转成大类型,是隐式转换: 比如 int 转成 float ,int类型四个字节,float 类型8字节    

显式转换:大类型转换为小类型,强制转换,比如 float a=13.5 ,int b; b=(int)a; // 13

(2)字符串与值类型转换:

int a=10 ; string b=a.toString();

string c=“12.4”; int a=float.parse(c);

ps: a+c 会自动转换为字符串

(3) 万能转换器进行不同类型的转换: Convert.ToXXX(Object value)

double a=Convert.ToDouble("20.15");

DateTime dateTime=Convert.ToDateTime("2012-03-15");

int c=Convert.ToInt32(a); // 20 ,注意转换成整数时,采用四舍五入

PS:拆箱装箱:将值类型转换成 object ,叫装箱

装箱:CLR需要做额外的工作,把堆栈上的值类型移动到堆上

拆箱:装箱操作的反操作,把堆上的数据移动到堆栈上,并返回其值

所以装箱拆箱的操作意味着一系列的堆栈操作,无疑是性能的消耗,我们应该避免装箱,拆箱的操作

 var i = 123;      //System.Int32
 //对 i 装箱(隐式)
  object obj = i;
//对 obj 进行拆箱(显式)
   i = (int)obj;
// 使用泛型,避免使用object类型
ArrayList arraylist=new ArrayList();
arrayList.add(0);
arrayList.add("1");

List<int> list=new List<int>();
list.add(0);
list.add(1);

ps:类型转换,为了避免抛出异常,可以使用is 和as 进行转换,is 只是返回true 和false,as 如何转换失败,会使用null

(4)浮点类型

float在转成double的时候出现了精度的丢失问题,所以尽量不要使用float ,而使用double

 double a = 0.3;
 double b;
b = a * 1.345;   // 结果 0.4035

float a=0.3F;
double b;
b = a * 1.345; // 结果 0.403500016033649

(5) 值类型是存储在堆栈上的,常用的值类型是 整数型,浮点型,布尔型,struct,枚举类型

(6) decimal (金额)

decimal myMoney = 99.9m;  必须要加m,否则发生编译
double x = (double)myMoney;
myMoney = (decimal)x;
decimal拥有比float更高的精度,最高能处理到小数点后面的28位。适合用在财务类等对数字精确度要求比较高的场合。

 5. 逻辑运算符

&& : a && b  ,逻辑与 ,a和b都为true 结果为true ,注意如果a 为false ,b就不会运算

||: a || b ,逻辑或,如果a为true ,b就不会在运算

应用 : var a= app || {}

!:逻辑非

6. 条件运算符if ..else 和 switch

if...else 用于区间判断,else 与离他最近的if是一对

switch 等值判断

7. 循环

平面的输出(二维输出),是两个 for循环,外层控制行,内层控制列

======================字符串和数组========================

8. String 类型常用的方法

(1) indexOf (): 查找索引 ,string a=“qwert”; a.indexOf("w"); //1

(2)length :求字符串的长度

(3)字符串比较: == 或者 Equals(),两则没有区别,但是后者显得更加专业些

(4)字符串截取: SubString(int startIndex,int length)

string email=“xiaowang@qq.com”;

string name=email.SubString(0,email.IndexOf("@"));

(5) 使用占位符完成字符串的拼接,占位符格式可以是货币,小数点位数等

string newstr=string.Format("我的名字{0},我的年龄是{1},我有{2:C3}",name,20,2000)  // Y2000.000

(6)Trim(),ToUpper,ToLower(),LastIndexOf()

(7)StringBuilder 类,定义可变字符串:如果字符串频繁的操作,使用它效率高

(8) string StuName=string.Empty;

9 .数组的常用方法

(1),C#数组声明的时候要指定长度

(2),数组在计算机内存中存储是连续的一块内存,变量定义的是首地址,使用下标来访问数据

(3),int[] a=new int[5]; int b={1,2,3,4,5,6}; int b=new int[]{1,2,3,4,5,6}

(4) ,字符串补充: string.join("_",nameArray);   "qr,qr,t,wt,y".split(\',\');

(5) 数组的遍历: for 或者 foreach(int key in Array)

ps: struct 不常用,作了解即可

enum: Icon = (Icon)Enum.Parse(typeof(Icon), dt.Rows[i]["F_Icon"].ToString());

11 .运算

2^10=1024 =1K
1024K=1M
1024M=1G
1G=2^10*2^10*2^10=2^30

12. 托管堆和非托管堆

托管堆,CG会自动回收,而非托管堆,CG不会自动回收,需要手动调用Dispose()方法释放内存

非托管的堆有:文件流,数据库连接等


13. String 和 Byte[] 对象之间如何转换

bit: 表示一个二进位(数据库中表示布尔类型)

Byte:字节 1Byte=8bit

编码:数字信息和现实信息转换机制,一种编码通常定义了一种字符集和转换原则,常用的编码是 utf-8 ,gb2312,unicode

字节数组和字符串的转换必然涉及到某种编码方式,不同的编码方式会产生不同的转换结果,在C#中,可以使用 System.Text.Encoding来管理常用的编码

 

class Program
    {
        static void Main(string[] args)
        {
            string s = "我是字符串,I am a string!";
            // 字节数组 -> 字符串
            Byte[] utf8 = StringToByte(s, Encoding.UTF8);
            Byte[] gb2312 = StringToByte(s, Encoding.GetEncoding("GB2312"));
            Byte[] unicode = StringToByte(s, Encoding.Unicode);

            Console.WriteLine(utf8.Length);
            Console.WriteLine(gb2312.Length);
            Console.WriteLine(unicode.Length);
            // 字符串 -> 字符数组
            Console.WriteLine(ByteToString(utf8, Encoding.UTF8));
            Console.WriteLine(ByteToString(gb2312, Encoding.GetEncoding("GB2312")));
            Console.WriteLine(ByteToString(unicode, Encoding.Unicode));

            Console.ReadKey();
        }

        // 字符串 -> 字节数组
        static Byte[] StringToByte(string str, Encoding encoding)
        {
            if (string.IsNullOrEmpty(str))
            {
                return null;
            }
            return encoding.GetBytes(str);
        }

        // 字节数组 -> 字符串
        static string ByteToString(Byte[] bytes, Encoding encoding)
        {
            if (bytes == null || bytes.Length <= 0)
            {
                return string.Empty;
            }

            return encoding.GetString(bytes);
        }
    }

 上述代码的运行结果如下图所示:

  我们也可以从上图中看出,不同的编码方式产生的字节数组的长度各不相同

13.BASE64 编码的作用,以及在C#中对其支持

和传统的编码不同,BASE64编码的设计致力于混肴那些8位字节的数据流(解决网络传输中明码问题),在网络传输,邮件系统中被广泛应用,BASE64不属于加密,但是它却能把明码变成很难识别的一种形式。

 在.NET中,BASE64编码的应用也很多,例如在ASP.NET WebForm中,默认为我们生成了一个ViewState来保持状态,如下图所示:

viewstate

  这里的ViewState其实就是服务器在返回给浏览器前进行了一次BASE64编码,我们可以通过一些解码工具进行反BASE64编码查看其中的奥秘:

Decoder

    那么,问题来了?在.NET中开发中,怎样来进行BASE64的编码和解码呢,.NET基类库中提供了一个Convert类,其中有两个静态方法提供了BASE64的编码和解码,但要注意的是:Convert类型在转换失败时会直接抛出异常,我们需要在开发中注意对潜在异常的处理(比如使用is或as来进行高效的类型转换)。下面的代码展示了其用法:

 

class Program
    {
        static void Main(string[] args)
        {
            string test = "abcde ";
            // 生成UTF8字节数组
            byte[] bytes = Encoding.UTF8.GetBytes(test);
            // 转换成Base64字符串
            string base64 = BytesToBase64(bytes);
            Console.WriteLine(base64);
            // 转换回UTF8字节数组
            bytes = Base64ToBytes(base64);
            Console.WriteLine(Encoding.UTF8.GetString(bytes));

            Console.ReadKey();
        }

        // Bytes to Base64
        static string BytesToBase64(byte[] bytes)
        {
            try
            {
                return Convert.ToBase64String(bytes);
            }
            catch
            {
                return null;
            }
        }

        // Base64 to Bytes
        static Byte[] Base64ToBytes(string base64)
        {
            try
            {
                return Convert.FromBase64String(base64);
            }
            catch
            {
                return null;
            }
        }
    }

  上面代码的执行结果如下图所示:

  

 ps: 字符串转换成BASE64,先把字符串转换成字节,然后再把字节转换为BASE64 字符串

以上是关于基础笔记 一 基本概念的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法学习笔记:数据结构基本概念

IA-32汇编语言笔记—— 基础知识

动态SQL基础概念复习(Javaweb作业5)

[前端笔记——WEB基础] 1.WEB基本概念

学会Git玩转Github笔记——Github基本概念 & 仓库管理

路由基础学习笔记之MPLS基本概念