C#读书笔记

/*实现了IDisposable接口的所有的对象在使用完以后要进行Dispose()资源的释放,可以使用using(实例化对象){}进行资

源释放,*/

//创建连接是非常耗时的,因此不要每次操作都创建连接。SQL语句中的关键字应该大写。
//1个数据库能够承载的连接是有限的,所以SqlConnection在程序中不能一直保持Open。
//对于数据库来说,连接是最宝贵的资源,用完了以后一定要Close、Dispose。
// 类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。
//元数据:用于描述要素、数据集或数据集系列的内容、覆盖范围、质量、管理方式、数据的所有者、数据的提供方式等有关的信息。元数据最本质、最抽象的定义为:data about data(关于数据的数据)。它是一种广泛存在的现象,在许多领域有其具体的定义和应用。

//元数据在软件构造领域定义:在程序中不是被加工的对象,而是通过其值的改变来改变程序的行为的数据。它在运行过程中起着以解释方式控制程序行为的作用。在程序的不同位置配置不同值的元数据,就可以得到与原来等价的程序行为。

.NET Framework基础类型:

.NET所有类型都继承自System.Object。C#类型体系包含两种类型:值类型,引用类型。

值类型继承自System.ValueType。而System.ValueType继承自System.Object。

指针:在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器(Register)。

指针一般出现在比较近机器语言的语言,如汇编语言或C语言。在使用一个指针时,一个程序既可以直接使用这个指针所存储的内存地址,又可以使用这个地址里存储的变量或函数的值。

寄存器:寄存器是中央处理器内的组成部分。寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和位址。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

C#中使用指针:为了保持类型安全,默认情况下C#不支持指针运算。不过可以通过使用unsafe关键字来定义允许使用指针的不安全上下文。

C#中的不安全代码不一定是危险的,只是其安全性无法由CLR进行验证。编译不安全代码时需要使用csc /unsafe *.cs。

class Program{
	unsafe static void Method(int *parameter)
	{
	*parameter+=*parameter;
}
	unsafe static void Main(){
	int parameter=ConvertToInt32(Console.ReadLine());
	Method(¶meter);
	Console.Writer(parameter);
	Console.ReadLine();
	//or
	//Console.ReadKey(true);
}
}

值类型:值类型直接存储值

一种由类型的实际值表示的数据类型。如果向一个变量分配值类型,则该变量将被赋以全新的值副本。

C#中的值类型包括结构类型和枚举类型两大类以及byte、int、long、float、double、char、boolean。

引用类型:引用类型存储的是对值的引用

由类型的实际值引用表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或"指向")原始值,不会创建副本。

引用类型包括类、接口、委托和装箱值类型。C#有两个内置的引用类型:object类型和string类型。

常量与变量:

常量:常量又叫常数,主要用来存储在程序运行的过程中值不会改变的数据。常量被声明为字段,通过const关键字声明,常量必须在声明时赋值。

变量:变量是指在程序运行的过程中值可以改变的数据。

数据类型转换:

显示类型转换:显示类型转换是将高精度数值转换为低精度数值,必须指明将要转换的目标类型。由于数据类型的差异,有可能丢失部分数据。

隐式(自动)类型转换:隐式类型转换又称自动类型转换,是将低精度数值转换为高精度数值,可以直接赋值而不用指明将要转换的目标类型。

进制转换:

值类型:值类型直接存储值

一种由类型的实际值表示的数据类型。如果向一个变量分配值类型,则该变量将被赋以全新的值副本。

C#中的值类型包括结构类型和枚举类型两大类以及byte、int、long、float、double、char、boolean。

引用类型:引用类型存储的是对值的引用

由类型的实际值引用表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或"指向")原始值,不会创建副本。

引用类型包括类、接口、委托和装箱值类型。C#有两个内置的引用类型:object类型和string类型。

常量与变量:

常量:常量又叫常数,主要用来存储在程序运行的过程中值不会改变的数据。常量被声明为字段,通过const关键字声明,常量必须在声明时赋值。

变量:变量是指在程序运行的过程中值可以改变的数据。

数据类型转换:

显示类型转换:显示类型转换是将高精度数值转换为低精度数值,必须指明将要转换的目标类型。由于数据类型的差异,有可能丢失部分数据。

隐式(自动)类型转换:隐式类型转换又称自动类型转换,是将低精度数值转换为高精度数值,可以直接赋值而不用指明将要转换的目标类型。

进制转换:

int i = 10;
            Console.WriteLine("十进制转二进制:"+Convert.ToString(i,2));
            Console.WriteLine("十进制转二进制:" + Convert.ToString(i, 2));
            Console.WriteLine("2进制转十进制:" + Convert.ToInt32("111", 2));
            Console.WriteLine("8进制转十进制:" + Convert.ToInt32("111", 8));

C#中运算符的使用:

算术运算符:+、-、*、/、%

赋值运算符:=、+=、-=、*=、/=、%=、??

int? x = null;//int? 可空类型,表示一个可能是空,也可能是int的结构
int y = x ?? 10;//如果x是null,则y=10,否则y=xConsole.WriteLine(y);Console.ReadKey(true);

关系运算符:==、!=、>、<、>=、<=、

关系运算符用于实现对两个值的比较运算,关系运算符在完成对两个操作数的比较运算后会返回一个代表运算结果的布尔值。

逻辑运算符:&&、||、!
条件运算符:?:

移位运算符:<<、>>

左移位运算:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

在数字没有溢出的前提下,对于正数和负数,左移n位就相当于乘以2的n次方。

右移位运算:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。

对于正数和负数,右移n位就相当于除以2的n次方。

is 运算符:

is运算符用于检查变量是否为指定的类型,如果是返回true,否则返回false。

流程控制语句:

选择结构:

if(boolean )  {语句块} else{语句块}  switch(表达式)  {case 常量表达式:  语句块   break;  default:语句块 break;}
循环结构:

while(boolean){语句块} 、do{语句块}while(boolean)  for(声明int类型变量并赋值;判断产生循环的条件;要循环的表达式){语句块}  foreach(类型 循环变量名 in  集合){语句块}

跳转语句:

break(终止循环)语句只能应用在switch、while、do...while、for或foreach语句中,break语句应用于循环作用域中。continue(忽略本次循环,继续下次循环)语句只能应用于while、do...while、for或foreach语句中,continue语句应用于循环作用域中。goto语句用于将控制转移到由标签标记的语句。goto 标签;  标签: 语句块return语句用于终止当前执行的方法、可以有返回值。

数组:

一维数组:

int[] arr;/*声明数组*//*初始化数组*/ 
 int[] arr = new int[5];/*表示数组长度是5*/int[] arr = { 1, 2, 3 };
int[] arr = new int[] { 1, 2, 3};

二维数组:

int[,] arr;/*声明数组*/
/*初始化数组*/
int[,] arr1 = new int[3, 3];
int[,] arr2 = new int[2,2] {{1,2},{3,4}};
static void Main(){ 
 int[,] arr = new int[,] { { 1, 3 }, { 2, 4 }, { 5, 7 }, { 6, 8 } };  
Console.Write("数组的行数:" + arr.GetLength(0));//输出二维数组的行数  
Console.Write("\t数组的列数:" + arr.GetLength(1));
//输出二维数组的列数  Console.WriteLine(); 
 Console.WriteLine("循环输出数组中的元素:");  
for (int y = 0; y < arr.GetLength(1);y++ )
  { 
   Console.Write("\t第" + y + "列");  }  Console.WriteLine(); 
 for (int i = 0; i < arr.GetLength(0);i++ )//遍历二维数组  
{
    string str = "";   
 for (int x = 0; x < arr.GetLength(1);x++ )
    { 
     str = str + Convert.ToString(arr[i, x])+"\t";    }    
Console.WriteLine("第"+i+"行:  "+str);  }  Console.ReadKey(true);}

ArrayList:动态数组,可以动态的添加和删除元素。ArrayList的容量可以根据需要自动扩充,只能是一维的形式。

class Program{
        static void Main()
        {           
               int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
           Array.Reverse(arr);//反转整个一维数组中元素的顺序 
            foreach (int i in arr)
           {
                Console.Write(i); 
          }
         Console.WriteLine();
          ArrayList list = new ArrayList(arr);//实例化ArrayList动态数组并赋初值            list.Add("你好!");//增加数据到动态数组中            
      list.AddRange(arr);//添加集合到动态数组的末尾 
           Console.WriteLine(list.Contains(5));//判断指定元素是否在数组中                       Console.WriteLine(list.IndexOf(5));//输出指定元素在数组中的索引位置,如果没有找到输出-1
          list.Insert(0, "Hi!");//插入数据到指定的位置
            list.Remove("你好!");//"你好!"被看做是一个元素,根据元素内容移除一个指定的元素 
           list.RemoveAt(1);//根据元素的索引移除一个指定的元素
            list.RemoveRange(1, list.Count - 1);//移除指定范围内的所有元素                        foreach (object obj in list)          {
              Console.Write(obj); 
         } 
         list.Clear();//移除所有元素            Console.ReadKey(true); 
       }}
哈希表Hashtable:散列表也叫哈希表。它表示键/值(key,value)对的集合。




class Program{
        static void Main()        {
          Hashtable htable = new Hashtable();//实例化Hashtable对象
            htable.Add(1, "你好!");//向哈希表中添加元素
           htable.Add(2, "很好!");
          for (int i = 0; i <= htable.Count;i++ ) 
         {
             Console.Write(htable[i]);                }
          Console.WriteLine(); 
          htable.Remove(1);//移除元素的键            Console.WriteLine(htable[2]);//输出哈希表中指定键的值
            htable.Clear();
          htable.Add("姓名", "张耕明");          htable.Add("年龄", 26); 
         Console.WriteLine("\t键\t值");          foreach (DictionaryEntry dicEntry in htable) 
         { 
            Console.WriteLine("\t" + dicEntry.Key + "\t" + dicEntry.Value);          }          Console.WriteLine(htable.ContainsKey("姓名"));//判断哈希表中是否包含指定的键 
           Console.WriteLine(htable.ContainsValue("张耕明"));//判断哈希表中是否包含指定的值 
           Console.ReadKey(true); 
       }
}

特性:特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集、类型、方法、属性等)相关联。特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性。

    class Program
    {
        static void Main(string[] args)
        {
            MemberInfo info = typeof(Demo);//提供对数据成员的访问
            //Attribute.GetCustomAttribute(类的元数据,要搜索的自定义属性的类型或者基类型);
            特性 attribut = (特性)Attribute.GetCustomAttribute(info, typeof(特性));
            attribut.Show();
            Console.ReadKey(true);
        }
    }
    [AttributeUsageAttribute(AttributeTargets.All, AllowMultiple = true, Inherited = false)]//可应用任何元素、允许应用多次、不继承到派生类
    class 特性 : System.Attribute
    {
        private string _name;
        public string Name
        {
            get
            {
                return _name;
            }
            set
            {
                value = _name;
            }
        }
        private int _age;
        public int Age
        {
            get
            {
                return _age;
            }
            set
            {
                value = _age;
            }
        }
        public 特性(string name, int age)
        {
            this._name = name;
            this._age = age;
        }
        public void Show()
        {
            Console.WriteLine("姓名:{0},年龄:{1}", _name, _age);
        }
    }
    [特性("张钊伟", 22)]
    public class Demo { }






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值