2019-01-03

c#语法

.net入门学习:感觉除了定义个类,就是无限的调用方法,然后就是读写数据库。这也许就是.net入门容易,容易养成了会写几个方法就可以完成任务。

一、.net面向对象

什么是面向对象?

1、面向对象编程英文 Object-Oriented Programming 简称 OOP

2、面向过程——是指把问题分解成步骤,一步一步实现。

面向对象——是把构成问题的事务分成各个对象,利用对象之间的关系来解决问题,面向对象因为把事务分成各个对象,所以更容易实现对象的封装,对象的复用。这也就是面向对象的几种特征(封装、继承、多态)。

为了更明白一点,举个例子:要解决去某水表制造公司上班这个问题,采用面向对象

先分解成对象

1.起床  这是一个对象,里面有成员(穿衣、洗脸、刷牙、吃饭)

2.上路  这是第二个对象,里面有成员(交通工具、路线)

3.到岗  这是第三个对象,里面有成员(签到)

4.上班  这是第四个对象,也是一天上班的核心对象,这个对象可以比较复杂一点,包含的成员比较多(进入工作任务、开始抄水表、完成工作流程、汇报工作等)

5.下班 这是第四个对象,这个对象,也有成员(交通工具和路线)这个和上班走同样的路线,只是方向不同,这里可以用到面向对象的一点重用的特性。

 通过个例子,就使用面向对象编程的方式完成了一个《水表公司上班超级系统》

-

二、.net数据类型

1、基本数据类型(C#就15种数据类型

分类:值类型(13个),引用类型(2个:string和object

整型8个,浮点型 1个,decimal 型 2个,布尔类型 1 个,char字符类型 1 个,引用类型(string字符串类型1个、object类型1个)



QC:命名空间的作用:

using system; //引用系统命名空间,主要是 int、bool等基本类的命名空间

using system.collection.generic;//主要是泛型集合的命名空间 List<T>……

using system.test;//这个应该是自己定义的命名空间

使用命名空间的好处是减少代码量例如:使用命名空间

Using system;int a=100;

Console.WriteLine(a);

========================================

不使用命名空间那么完成相应的事情,就要写:

System.int  a = 100;

System.Console.WritelLine(a);

 

关于转义字符

为了使用一些特殊的字符型,C#使用转义字符

字符型中有下列转义符:1,\'用来表示单引号2,\"用来表示双引号3,\\ 用来表示反斜杠4, \0 表示空字符5, \a 用来表示感叹号6, \b 用来表示退格7, \f 用来表示换页8, \n 用来表示换行9, \r 用来表示回车10, \t 用来表示水平tab11, \v 用来表示垂直tab 

 

要点:

1.数据类型分为值类型(Value type)和 引用类型 (reference type)

2.值类型存储实际值,而引用类型则为对存储在内存中某处的值的引用

3.string为引用类型,char为值类型

4.所有值和引用类型都由一个名为object的基本类发展而来

5.枚举(enum)和结构(struct)为值类型

6.类、接口、数组、委托为引用类型

2、数据类型的转换

(1)c#类型转换的方式: 隐式转换、显示转换、用户自定义转换、使用帮助程序类的转换

隐式转换:由于该转换是一种安全类型的转换,不会导致数据丢失,因此不需要任何特殊的语法。 例如,从较小整数类型到较大整数类型的转换以及从派生类到基类的转换都是这样的转换。

显式转换(强制转换):显式转换需要强制转换运算符。 在转换中可能丢失信息时或在出于其他原因转换可能不成功时,必须进行强制转换。典型的例子包括从数值到精度较低或范围较小的类型的转换和从基类实例到派生类的转换。

用户定义的转换:可以定义一些特殊的方法来执行用户定义的转换,从而使不具有基类–派生类关系的自定义类型之间可以显式和隐式转换。  

使用帮助程序类的转换:若要在不兼容的类型之间进行转换,例如在整数与 DateTime 对象之间转换,或者在十六进制字符串与字节数组之间转换,则可以使用 BitConverter 类、Convert 类和内置数值类型的 Parse 方法,例如 Int32.Parse

 

2装箱和拆箱转换(Boxing,UnBoxing)

主要是值类型与引用类型之间相互转换 

如:object obj 1= 10;

int i = (int)obj; //拆箱

int j = 100;

object obj2 = j; //装箱 


(3)string类型转换成int类型 bool result = Int32.TryParse(value (string类型), out number(int类型));

int.Parse 方法或者 int.TryParse方法都可以将一个string类型的数据转换成int类型。

①int.Parse法:——

intA =int.Parse(str);




②int.TryParse法

int.TryParse(str, out intA);



(4)Convert类实现数据类型转换

ToBoolean 将指定的值转换为等效的布尔值 

ToByte 将指定的值转换为8位无符号整数 

ToChar 将指定的值转换为Unicode字符

 ToDateTime 将指定的值转换为DateTime

 ToDecimal 将指定值转换为Decimal数字 

ToDouble 将指定的值转换为双精度浮点数字 

ToInt16 将指定的值转换为16位有符号整数

 ToInt32 将指定的值转换为32位有符号整数 

ToInt64 将指定的值转换为64位有符号整数 

ToSByte 将指定的值转换为8位有符号整数

 ToSingle 将指定的值转换为单精度浮点数字 

ToString 将指定值转换为其等效的String表示形式

 ToUInt16 将指定的值转换为16位无符号整数

 ToUInt32 将指定的值转换为32位无符号整数 

ToUInt64 将指定的值转换为64位无符号整数

 那么,类型.Parse与Convert有什么区别呢?他们的区别在于Parse的参数只能是字符串类型(string),只能把字符串类型转成其它类型,而Convert可以某一对象的值转换成很多类型。

如:bool Bl = = true;int a = Convert.ToInt16(Bl); //只能这样转换,否则通不过。

(5)日期类转换 

字符串转日期string dateString = "5/1/2008 8:30:52 AM";DateTime date1=DateTime.Parse(dateString,System.Globalization.CultureInfo.InvariantCulture);

日期转字符串DateTime dat1 = new DateTime();

string datastr=dat1.ToString(System.Globalization.CultureInfo.InvariantCulture);


三、变量和常量

1.常量:在编译时其值能够确定,并且程序运行过程中值不发生变化的量.

通俗来说,就是定义一个不能改变值的量。既然不能变动值,那就必须在定义的时候初始化。

示例:

语法: const 类型名常量名=常量表达式;

例子: const string  cat="hello cat";     

2.变量:具有变量名和值的对象

   变量就是把数据暂存于某处内存中,以备调用。

   示例:

   声明:[访问修饰符] 类型变量名[=初值][变量名=[初值]...];

   int int1,int2,int3=3,int4;

3.变量的作用域

   变量可以使用修饰符,可用的修饰符如下:

   public 不限制访问。

   protected 仅限于当前类和派生类。

   Internal 访问仅限于当前程序集。

   protected internal 访问仅限于当前程序集或从当前派生的类。

   private 仅限于当前类。

   除以上修饰符外,还可以使用 static(静态)和readonly(只读)

 3.命名规范

    变量和方法参数命名:根据不同的数据类型前缀+首字母大写的变量描述


=============================要点======================================

要点:

1.但是在方法体内声明的变量,不可以用public private等访问修饰符修饰;

2.在类中声明的变量,称为字段或成员变量;

3.变量名必须是字母或下划线开头不能有特殊符号;

4.变量可以同一语句中声明多个,用逗号分开;

5.变量申明时,可以赋值,也可以不赋值。

6.常量和只读变量区别:

   a.常量必须在声明时就被初始化,指定了值后就不能修改了.  

只读字段可以在声明时被初始化,也可以在构造函数中指定初始化的值,在构造 以后值就不能修改.

   b.常量是静态的,而只读字段可以是静态和动态的

   c.Const可以用在字段和局部变量,readonly只可以修饰字段


四、运算符和表达式 

1.运算符分类和优先级  



2.表达式分类

   按运算符数目可分为:一元表达式,二元表达式,三元表达式

   按用途分类:正则表达式、Lambda表达式等等。

   关于这些复杂类型的表达式,后续会再作详细说明。 

要点: 

 1.   / 除法运算符  5/2=2   (并非四舍五入,而是舍去小数)

 2.   %取模运算符  5%2=1  5.0%2.2=0.6 (第2数整除第1数的余数)

 3.  ++ 递增运算符  --  递减运算符

     以上两个运算符,可以在前也可以在后, 但是在前和在后,其执行顺序不同例如:

     int a=1; int b=a++;

     运算符在后,则程序先把a的值赋给b,再对a执行+1;

     其运行结果为: a=2  b=1

     如果写成下面的例子:

     int m=1;int n=++m;

     则执行完以后结果为: m=2 n=2;

     实际上相当于 int m=1; m=m+1; int n=m;

4.位移运算符<<(左移)  >>(右移)

这两个运算符比较不常用,按官方的理解稍有点复杂

可以这样理解:其实就是数据转换成二进制的左右移动;

右移左补0,左移右补0,后面多出来的部分去掉。

如:把89右位移一位,可以这样计算:

string flag = Convert.ToString(89, 2); //这是把你的89转为2进制数。。

//flag结果:1011001

//你要右位移,左边补个0,后面多出来一位去掉

int j = Convert.ToInt32("0101100", 2); //再把2进制转化了10进制数。。

//结果:44

//位移就是这么简单 

5.逻辑异或运算符 ^

   对于简单逻辑运算符 & || 我们比较熟悉了,但对于异或好多人就不了解,甚至很少用到

理解这个运算符,首先它虽然是逻辑运算符,但也是可以运算整数的

先说布尔运算,简单说,就是两个操作数不同,则为真;相同时为假

如:true ^ true=false; false^false=false; true ^false=true; false ^true=true;

操作整数时,则进行位运算,如:

100^45=73

数值运算举例

按位异或的3个特点:

(1) 0^0=0,0^1=1  0异或任何数=任何数

(2) 1^0=1,1^1=0  1异或任何数-任何数取反

(3) 1^1=0,0^0=0  任何数异或自己=把自己置0

例如:10100001^00010001=10110000

按位异或的几个常见用途:

(1) 使某些特定的位翻转

例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。

  10100001^00000110 = 10100111

(2) 实现两个值的交换,而不必使用临时变量。

例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:

    a = a^b;//a=10100111

    b = b^a;//b=10100001

    a = a^b;//a=00000110


(3) 在汇编语言中经常用于将变量置零:

    xor   a,a

(4) 快速判断两个值是否相等

举例1: 判断两个整数a,b是否相等,则可通过下列语句实现:

        return ((a ^ b) == 0)

[if !supportLists]1. [endif]字符和字符串运算

由于字符可以隐式转为整型,如‘a’+6=103  a被转为Unicode 97

‘a’*’b’=9506       相当于 97*98

‘a’>’b’结果为false  相当于97>98 返回false

‘a’ +”早上好”  返回 “a早上好”  

由此可见。不同类型运算在C#中会先执行一次隐式转换


学习: 

:http://edu.51cto.com/c222faa0-275f-42cb-85e6-e161b5dd0bff


异常:

  Console.WriteLine("请输入一个数:");

            //第一种异常:类型转换错误

            int num = int.Parse(Console.ReadLine());

            //第二种:存储的值超过范围

            Console.WriteLine("请输入一个数:");

            byte num2 = byte.Parse(Console.ReadLine());

            //第三种:除数为0

            double num03 = num / num2;

            //第四种:数组超过索引范围

            int[] array = { 1,2,3,4,5,6};

            foreach(int item in array){

                Console.WriteLine("{0}",item);

            }

            //第五种:连接数据库发生的异常

            Console.ReadKey();

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容