C#入门基础语法

1.类型转换[隐式转换]---------string 可看做是值类型

Float y = 3.5;

不会被编译,因为类似3.5这样带有小数部分的数字常量会被c#认为是double值

需要如下声明:

Float y = (float)3.5;

Float y = 3.5F;

2.Do...while的用法

do处理语句; while(bool表达式)

至少执行一次do语句;先执行Do语句,再判断bool值,为true返回do语句开始,否则,返回do语句结束点

3.跳转语句

类型

适用于

用法

Break

只能用于switch、while、do、for

退出其本身所在的处理语句,只能退出直接包含它的语句,不能退出包含它的多个嵌套语句

Continue

只能用于while、do、for

忽略循环语句块内位于它后面的代码,从而直接开始新的循环。只能使直接包含它的语句开始新的循环,而不能作用于包含它的多个嵌套语句

Return

控制返回到使用return语句的函数成员的调用者。

Goto

将执行转到使用标签标记的处理语句。标签包括:switch语句内的case标签和default标签,以及常用标记语句内声明的标签。它不但能作用于定义它的语句块内部,而且能作用于该语句块外部,但不能将执行转到高语句所包含的嵌套语句块的内部

4.默认访问修饰符

访问修饰符

默认访问修饰符

类内成员

private、protected、public、internal、protected internal

private

非嵌套类

Public、internal、partial【分部类】

internal

嵌套类(内部类)

private、protected、public、internal、protected internal、partial

private

命名空间【命名空间的声明不能包含修饰符】

-

Public

接口中的方法

-

Public

5.Main函数,程序的入口。

参数为String[]类型,Main的参数即为命令行执行.exe时的参数,参数之间用空格分隔。

6.数组的高级应用

属性

获取方式

用法

上限

arr.GetLowerBound(0)

arr.GetLowerBound(1)

其中,0和1代表维数

上限=下限+维长-1

迭代:

for (int i = zz.GetLowerBound(0); i <= zz.GetUpperBound(0); i++)

    for (int j = zz.GetLowerBound(1); j <= zz.GetUpperBound(1); j++)

下限

arr.GetUpperBound(0)

-

维长

arr.GetLength(0)

-

维数

arr.Rank

具体指几维,一维、二维、三维、四维…

四维数组就是好几天里每天来一群人排成三维数组,某人的位置就是第几天

来的第几层的第几行的第几个人。

数组中元素总数

arr.Length

数组中元素总数 = arr.GetLength(0) * arr.GetLength(1)   // 各维度维长乘积

 IEnumerator

-

迭代:

System.Collections.IEnumerator myIEnumerator = myArr.GetEnumerator();

while (myIEnumerator.MoveNext() && myIEnumerator.Current != null)

SetValue

-

ff.SetValue(12, 0);    // 12为要设置的值,0为索引位置

CreateInstance

-

int[] mm = new int[2] { 3, 5 };   // 数组zz的维长

int[] nn = new int[2] { 2, 3 };    // 数组zz的下限

string[,] zz = (string[,])Array.CreateInstance(typeof(string), mm, nn);

static Array ReDim(Array a, int newSize)

 {

      Array nn = Array.CreateInstance(a.GetType().GetElementType(), newSize);

      int len = newSize > a.Length ? a.Length : newSize;

      Array.Copy(a, 0, nn, 0, len);   // a为源数组,0为维度,nn为新数组

      return nn;

  }

  • CreateInstance重定义数组:
  • CreateInstance方法可创建下限不为0的数组:

数组转换

-

值类型数组不能进行数组转换;两种类型需存在显示或隐示转换

nn[,] nns = new nn[3, 2];   // mm、nn为自定义类

mm[,] rcs1 = (mm[,])nns;

object[,] aa = (object[,])nns;

7.集合类

集合类

声明方式

用法

ArrayList

ArrayList nn = new ArrayList();

可变长数组

Hashtable
【键值对】

Hashtable mm = new Hashtable();

表示键值对的集合,Hashtable将添加元素放在System.Collections.DictionaryEnty对象中,所以在使用foreach或IEnumerator的Current属性时,应该将Hashtablet元素转换为DictionaryEnty对象
Hashtable mm = new Hashtable();

IEnumerator e = mm.GetEnumerator();

while (e.MoveNext())

{

   DictionaryEntry de = (DictionaryEntry)e.Current;

   Console.WriteLine("{0}-{1}", de.Key, de.Value);

}

Dictionary

【键值对】

Dictionary<int, string> mm = new Dictionary<int, string>();

Hashtable和Dictionary比较类似,两者具体使用如下:

  •  单线程程序中推荐使用Dictionary,有泛型优势,且读取速度较快,容量利用充分
  • 多线程程序中推荐使用Hashtable,默认的Hashtable允许单线程写入,多线程读取,对Hashtable进一步调用Synchronized()方法可以获得完全线程安全的类型。而Dictionary非线程安全,必须人为使用lock语句进行保护,效率大减。
  • Dictionary有按插入顺序排列数据的特性(注意:但当调用Remove() 删除过节点后顺序被打乱),因此在需要体现顺序的情境中使用Dictionary能获得一定的便利。(Hashtable输出时,不按插入顺序)

Queue

Queue mm = new Queue();

Queue和ArrayList比较相似:

  • 先进先出原则
  • ArrayList有Capacity方法返回容量,随着成员数增加,Capacity值会动态增加
  • Queue没有Capacity方法,是个堆栈,没有固定容量
  • IEnumerable可以使集合类型有foreach功能,它是一个泛型接口

SortedList

SortedList sl = new SortedList();

  • SortedList需要进行排序处理,所以速度慢于Hashtable的处理
  • 索引顺序基于排序顺序。当添加元素时,元素按正确的排序顺序插入SortedList,同时索引会相应进行调整。若移除了元素,则索引也会进行相应的调整。所以添加或移除元素时,特定键/值的索引可能会更改

Stack

Stack sk = new Stack();

后进先出

8.接口【参见代码】

接口可以继承多个接口,但不能继承类;

类可以继承多个接口,也可以继承类,但只能继承一个类;

接口必须实现了才能使用,实现接口必须实现接口中的方法和属性,接口的实现方法通常为public;

可参见代码:自定义集合类【接口】

注:ArrayList的Sort方法是利用接口IComparable来进行排序的,所以ArrayList中的每个对象都需要实现IComparable接口,int、string等系统已定义类型已经实现了IComparable接口。

9.迭代器【参见代码】

用途

语法

规则

实现foreach迭代

Foreach(...)

{

       yield return 成员;

       …

       yield break;

}

如果要迭代一个类则使用GetEnumerator(),返回类型是Enumerator;如果要迭代一个类成员则使用Enumerable
可参见代码:迭代器

10.继承

特性

声明

描述

隐藏类成员

Class mm{ public void chuli() {} }

Class nn:mm { new public void chuli() {} }

使用关键字new来明确涉及要隐藏基类的同名成员chuli()

重写

Class mm{ public virtual void G(){} }

Class nn:mm{ public override void G(){} }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值