C#学习笔记(一)---C#语言基础(上)

C#语言基础(上)

前言:写给我自己。陆陆续续学习C#已经有8个月的时间了,但是脑子里面还是一片混乱,学的多,忘的也多,重新安心的坐在这里,把之前学过的东西整理一下。

1.1第一个C#程序:

using System;
class test{
static void Main(){
int x=12*30;
Console.WritleLine(x);
}
}
  • 在C#中语句按顺序执行,以后面的分号(或者代码块)结尾。
  • 方法可以接收调用者输入的参数,并通过返回类型给调用者返回输出数据。
  • C#把Mian方法当作默认执行入口,Main方法也可以返回一个整型,从而为程序执行的环境返回一个值。
  • 方法是C#中的一种函数,另一种函数是我们用来执行乘法运算的*运算符。还有构造方法、属性、事件和索引器和终结器。
  • 类由数据成员和函数成员组成,形成面向对象的构件块。类也是一种类型。
  • .Net Framework的组织方式为嵌套的命名空间。如using system.Text;也可以用完全限定名来引用类型。
  • C#编译器把一些列的.cs文件编译成程序集,程序集是.Net Framework最小的打包和部署单元。程序集是一个应用程序或者是一个库(没有Main方法)。.NET Framework就是一组库。

1.2语法

  • 标识符是程序员为类、方法、变量等选择的名字。标识符必须是一个完整的词。区分大小写。通常约定参数、局部变量、私有字段应该由小写字母开头,其他单词大写;而其他类型应该有大写字母开头,其他单词也大写。
  • 关键字是系统保留的名称,不能将他们用作标识符。如uisng class static void int等,下面是所有C#关键字:如果用关键字作为标识符,可以在关键字前面加“@”来避免冲突。
    C#关键字
  • 一些关键字是上下文相关的(上下文关键字),他们也可以不用“@”前缀就能当作标识符来用。
    C#上下文关键字
  • 字面量是静态嵌入程序中的原始数据片段。比如10、“Hello World”等。 分号用于结束一条语句。这意味着一条语句也可以放到多行中,比如在ADO.NET中如果我们要写一条很长的SQL,可以放入多行中。大括号用于将多条语句放到一个大括号中形成一个语句块。
  • 注释:C#提供了两种注释方式:单行注释和多行注释。单行注释由双斜线开始,到本行结束为止://…多行注释以/开始,以/结束,可以用来注释多行。注释也可以嵌入到XML文档中。

类型基础

  • 型定定义了值的蓝图。值是由变量或者常量表示的存储位置。变量是表示存储位置的符号, 包含的值会不断变化。而常量则表示不会变化的值。C#中的所有值都是一种类型的实例。一个值或这一个变量所包含的一组可能值均由其类型决定。
  • 定义类型是是指那些由编译器特别支持的类型。int就是一种预定义类型,他代表了正负21亿的整数范围(2147483648),还有long、float、double、char、string、bool等
  • C#的一个优点是预定义类型和定义类型只只有少量的不同
  • 实例化某种类型即可创建数据,预定义类型可以简单的通过字面量来创建实例,例如12或者”Hello World“。使用new运算符后会立即实例化一个对象,对象的构造方法会在创建对象的时候被调用。构造方法向发法一样被定义,不同的是方法名和返回类型被简化成它所属的类型名。
  • 实例与静态成员:由类型的实例操作的据成员和数成员称称为实例成员,而那些不是由类型实例操作的成员必须添加static前缀修饰。还有一点需要注意的是:静态类型的成员都是静态成员,这是因为不能在静态类中添加实例成员,因为静态类永远不会被实例化。
  • **Public关键字:**该关键字将成员公开给其他类,把成员标记为Public就是在说:"这就是我想让其他类看到的,剩下的都是我自己私有的。"用面向对象语言,我们称之为利用共有成员封装了类中的私有成员。
  • **转换:**在C#中,兼容类型的实例可以互相转换。转换始终会根据一个已经存在的值创建一个新的值:
 int a = 1234;
 long b = a;  //a到b的转换是隐式的,因为b能够保存的数据远远大于a,所以是安全的        
 Console.WriteLine(b+1);//1235
 Console.WriteLine(a);//124

对于”转换始终会根据一个已经存在的值创建一个新的值“这句话,意思就是a是已经实例化好的,b根据a的值创建了一个新的实例,该实例是“long”类型的。转换可以是隐式的也可以是显式的,隐士转换会自动发生,而显式转换需要cast关键字。例如:int转换为long可以隐式的进行,而反之不行。隐式转换只有在下列条件都满足时才进行 :
①编译器能保证转换总能成功。
②没有信息在转换的过程中丢失。
相对的,只有满足下列条件时才能进行显式转换:
①编译器不能保证转换总能成功。
②信息在转换的过程中可能会丢失。
而如果编译器确定某个转换一定会失败,那么隐式的和显式的转换都会被禁止。包含泛型的转换在特情况下也会失败。**提示:**数值转换是C#内置的,C#还支持引用转换、装转换和自定义转换。

值类型和引用类型

所有C#类型可以分为以下几类:
①值类型
②引用类型
③类型参数(泛型参数)
④指针类型
值类型包含大部分的内建类型(预定义类型)以及自定义的Struct类型和emun类型。
值类型和引用类型最根本的区别在于他们在内存中的处理方式。
引用类型包含类 、数据、委托、接口。
值类型:值类型的变量和常量的内容仅仅是一个值。对值类型的赋值操作会赋值这些实例。例如:

 public struct Point
    {
        public int x;
        public int y;
    } 
 static void Main(string[] args)
        {
           Point p=new Point();
            p.x = 1;
            Point p2 = p;//赋值引起了复制
            Console.WriteLine(p2.x);
            p.x = 9;
            Console.WriteLine(p2.x);//1
        }     

p和p2拥有各自不同的内存空间。
引用类型:引用类型比值类型更复杂,它有两部分组成,对象和对象的引用。引用类型的变量或常量的内容是对一个包含值的对象的引用。给引用类型赋值时只是复制了引用,而不是对象实例。(这样其实很合理,按存储开销来说,对象在对上的存储开销会比较大,这样做的结果是两个引用同时指向了对象)如果上例中的Point是个class,则对p的操作就会影响到p2了。
null:一个引用可以赋值null表示它不指向任何对象。相对的,值类型通常(可空类型除外)不会有null值。
存储开销值类型实例正好存储占用其字段的内存,Poin(struct)需要真用8个字节。**提示:**从技术上说,CLR用整数倍字段的大小来分配内存。Struct A{byte x; long y;}被分配了16字节的大小(long是8个字节,CLR按照y字段的长度乘以A中的字段总数来分配内存)。引用类型为引用和对象单独分配内存,对象占用了和字段一样的字节数,此外,还要加上额外的管理开销,它用于存储对象的键值,还有像多线程读写锁的状态和它是否被垃圾回收(GC)选中等临时信息。每一个对象的引用都需要额外4到8字节,这取决于32为还是64为系统。

预定义类型的分类

C#预定义类型的分类

C#中的预定义类型又称为框架类型,它们都在System命名空间下。下面的两个语句仅仅在拼写上有所不同:

int a;
System.int32 i;

CLR中,除了decimal以外的一系列值类型被认为是基本类型,所谓基本类型,是因为它们在编译过的代码中被指令直接支持。因此它们通常被翻译成底层处理器直接支持的指令。

        //下面的是16进制的表示
int a=7; //0x7
bool b=true;//0x1
char x='A';//0x41
float y=0.5f;//用IEEE浮点型编码

数值类型:下表列出了所有的C#预定义值类型
这里写图片描述
数字字面值:整型字面值可以用十进制或16进制标记,16进制小数用0X前缀表示。(中文翻译中的渣)实数字面值可以使用十进制和指数标记。
数值字面值类型推断中文翻译太烂了,网上下载了一本英文原版的,看到这的时候简直错误百出,没法看的地步了。这部分以后的内容以后在补上吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值