C#零基础入门

从上往下看可能会遇到一些看不懂的知识,不会有问题,有些东西不需要刨根问底,缘分到了自然知道了

环境及IDE

Visual Stdio 2017,Microsoft官网可下,安装后模块里面选C#,控制台和windows窗口。

接下来的使用:文件->新建->项目->控制台 or Windows窗口。

最好新建在自己知道的文件夹,在新建的时候设置好名字,不然之后改很麻烦

      \;\\\;


      \;\\\;

Hello World

双击Program.cs,这个是整个项目的Class,包含一个Main方法。

namespace Text
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}

上述代码为命名空间Text里的类Program,这个类包含一个方法Main。

Console也是一个类,这里使用的是这个类中的输出函数,参数为要输出的字符串。ReadKey用于从输入流获取一个字符。

      \;\\\;


      \;\\\;
Windows窗口应用

开始是一个的窗口类型,你可以在工具箱中添加Lable标签,TextBox文本框,Button按钮等对象。

注意在添加之后的第一件事是修改名字,因为如果有方法使用了这个对象,你在之后修改名字就会出错

每个对象都有属性,分为属性和事件。属性是静态的固有的值,如颜色大小;事件为触发时生效的方法,如果单击后产生xx效果。

双击某个对象后会在"窗口.cs"和"窗口.Designer.cs"中产生对于的事件代码,此时如果只删除"窗口.cs"中的代码,vs会报错。需要去"窗口.Designer.cs"中找出这个事件的代码删除

下图为对一个按钮单击的事件:
在这里插入图片描述

private void btnAdd_Click(object sender, EventArgs e)
{
    int num1, num2;
    num1 = int.Parse(txtNumber1.Text);
    num2 = int.Parse(txtNumber2.Text);
    int answer = num1 + num2;
    lblAnswer.Text = "运行结果为:";
    lblAnswer.Text += num1+"+"+num2 + "="+answer;
}

      \;\\\;


      \;\\\;
命名规范

Pascal大小写: 每个单词的首字母大写,其它小写,用于标识类名方法名属性名(ProductOrder)。
Camel大小写: 首字母小写,其后每个单词的首字母大写,其它小写,用于标识局部变量方法的参数名(backColor)。

类名用名词(Employee),方法名用动词开始(GetEmployeeName)。

常量的每个字母都大写,变量一般用Camel大小写。

      \;\\\;


      \;\\\;
基本类型

变量分为常量与变量。常量分为字面值(“aaa”)和符号常量(const int a);变量分为简单数据类型和引用类型。

所有简单数据类型有:
在这里插入图片描述

其他的和C语言中差不多,但是C#和java中为强类型,bool 的值为true或false,不能写if(1)一定要写if(true)
      \;\\\;


      \;\\\;
隐式转换

  1. 隐式转换一般在不同类型的数据进行混合运算时候发生,当编译器能判断出转换的类型,而且转换不会带来精度的损失时,C#语言编译器会自动进行隐式转换。

  2. 隐式转换时按数据长度增加的方向进行,以保证精度不降低,例如int型和long型运算时,先把int数据转成long型后再进行运算。

  3. byte型和short型参与运算时,必须先转换成int型。

  4. char 可以隐式转换为 ushort、int、uint、long、ulong、float、double 或
    decimal,但是不存在从其他类型到 char 类型的隐式转换。

  5. 赋值时,如果右边的类型的大小大于左边类型,不能隐式赋值。
          \;\\\;


      \;\\\;
类型转换与输入输出

string转其他类型:

string x = "123";
int a = System.Convert.ToInt32(x);
int b = int.Parse(x);

其他转string:

int c = 11;
string x = c.ToString();

为什么都和string相关,因为C#中控制台的输入输出都是以string为参数。
Console.ReadLine()得到的是字符串你需要用函数转换才能赋值给int。

      \;\\\;


      \;\\\;

一维及多维数组

一维数组:

int[] A = new int[10];
int[] B = new int[] { 1, 2, 3, 4 };
int[] C = new int[4] { 1, 2, 3, 4 };
int[] D; D = new int[10];

数组其实是System.Array类,包含以下方法和成员:

  1. Length /属性返回数组长度。
  2. Max()和Min()方法 /返回数组中的最大小值
  3. Clear /清除数组元素的值
  4. Copy /复制数组
  5. Sort /对数组排序
  6. Reverse /反转数组元素的顺序
  7. IndexOf /从左至右查找数组元素
  8. LastIndexOf /从右到左查找数组元素
  9. Resize /更改数组长度
//以sort为例
	//Array.Sort(int[])  or  
    //Array.Sort(int[],pos,length)   or
    //Array.Sort(int[],pos,length,comparer) 
    int[] a = new int[20];//默认为0
    for (int i = 0; i <= 19; i++) a[i] = 20 - i;
    Array.Sort(a, 1, 5);
    for (int i = 0; i <= 19; i++) Console.Write(a[i] + " ");

多维数组:

学过C的会好理解一些,一个n维的数组可以看成一个数组元素为n-1维数组的数组

int[][] A = new int[20][];//数组创建必须有第一维的size
int[][] B = new int[][] { new int[20], new int[18], new int[20] };
int[,]  C = new int[,] { { 1, 2, 3 }, { 6, 7, 10 }, { 1, 4, 5 } };
	//此法多个一维数组应该相同长度
  1. 第一种方法int[][] A = new int[20][];只说明了A是一个方有20个一维数组的数组,必须要A[0]=new int[10]后才能使用A[0][4]

  2. 可以将A[0]当作一维数组使用


n维数组:

    int[][][][][] A = new int[20][][][][];
    int[][][][][] B = new int[][][][][] { new int[15][][][], new int[16][][][] };
    int[,,,,] C = new int[,,,,] 
    { { { { { 1, 2 }, { 3, 4 } }, { { 1, 2 }, { 3, 4 } } }, { { { 1, 2 }, 
    	{ 3, 4 } }, { { 1, 2 }, { 3, 4 } } } },
    { { { { 1, 2 }, { 3, 4 } }, { { 1, 2 }, { 3, 4 } } }, { { { 1, 2 }, 
    	{ 3, 4 } }, { { 1, 2 }, { 3, 4 } } } } };

&ThickSpace; &ThickSpace; \;\\\;


&ThickSpace; &ThickSpace; \;\\\;

String类

  • String是对内存中的字符串的调用,为多个Unicode字符的组合,字符串之间可以用‘+’连接,用"==“和”!="比较
  • 字符串只读,虽然你可以对它进行重新赋值,连接等操作,但是不能通过索引器修改内容(x[0]=‘a’)。可以转成char[]再修改。
  • 和字符数组的转换:char[] charArr = name.ToCharArray();不以\0结束
  • 包含以下方法和成员:
    1. Length,返回字符串的长度
    2. IndexOf、LastIndexOf,第一,最后个子串的位置
    3. Insert,插入一个字符串
    4. Remove,删除若干字符
    5. Replace,替换
    6. Split,转换为字符串数组
    7. Substring,求子串
    8. Trim,去掉首尾空格
a.IndexOf("abc")第一次出现这个子串的位置
a.LastIndexOf("abc")最后一次出现这个子串的位置

b=a.Insert(2,"kk");插入

b=a.Replace("aa","bb");所有aa变成bb

a.Trim()去首尾空格TrimStart TrimEnd
//以Split为例
static void Main(string[] args)
{
    Console.WriteLine("请输入一些人的名字:");
    string Names = Console.ReadLine();
    
    char[] separator = new char[] { ',', ' ', ',', ';', ';' };
    string[] Name = new string[100];
    Name = Names.Split(separator);
    
    int counter = 0;
    foreach(string name in Name)
    {
        if (name[0] == '张') counter++;
    }
    Console.WriteLine("这些人中有{0}个姓张。",counter);
    Console.ReadKey();
}
//张三,桑,阿三,张阿三,阿三,里阿三,张阿三
foreach(类型  变量 in 集合)
foreach(int xxx in a)//int[] a

&ThickSpace; &ThickSpace; \;\\\;


&ThickSpace; &ThickSpace; \;\\\;

对象与类

任何事物可以看成对象,对象具有:数据(型号,性别),行为(加速,旋转)

数据用“字段(Field)”来实现,行为用“方法(Method)”来实现

如果一些对象具有相同种类的数据和行为(都有身高,都可以走路),那么我们不需要一个一个去写他们的代码,只需要用类(Class) 去表示这一组对象。类为他们统一的抽象描述。

&ThickSpace; &ThickSpace; \;\\\;


&ThickSpace; &ThickSpace; \;\\\;

抽象、封装、继承与多态

抽象:

只抽象出与当前目标相关的,忽略其他的(要考虑汽车的加速度时,不需要考虑汽车的颜色)

封装:

将相关数据和和操作封装在一个对象中,互不干扰,且可以将信息隐藏,只对外留下接口

继承与多态:

一个新类可以继承之前的类,获得那个类的所有功能,新类在此基础上可以添加新的功能

&ThickSpace; &ThickSpace; \;\\\;


&ThickSpace; &ThickSpace; \;\\\;

私有字段与属性

[访问修饰符] class 类名 [:基类]
{
	//类的成员;
}

public class Student //类名,Pascal大小写
{
	string name;//字段,Camel大小写
}

Student a = new Student();

公有字段会暴露了内部的细节,且外部修改可能会出现无效数据。所以字段一般修饰为private,外界无法访问

除了方法外,C#提供属性来访问私有字段

public class Student 
{
	private string name;//字段,Camel大小写
	public string Name  //属性,一般为字段对应的Pascal大小写
	{
		get { return name;}
		set { name = value;}
			//value为外部赋值进来的数据
	}
}
string x = "aa";
Student a = new Student();
a.Name = x;
Console.WriteLine(a.Name);

&ThickSpace; &ThickSpace; \;\\\;


&ThickSpace; &ThickSpace; \;\\\;

访问修饰符

访问修饰符 意 义
public 访问不受限制,可以类内和任何类外的代码中访问
protected 可访问域限定于类内或从该类派生的类内
internal 可访问域限定于类所在的程序集内
protected internal protected或者internal,即可访问域限定于类所在的程序或那些由它所属的类派生的类内
private 可访问域限定于它所属的类内

命名空间(namespace)
隐式地具有public访问性,且不允许有访问修饰符。

类(class)
构造函数默认为public访问修饰符。
析构函数不能显示使用访问修饰符且默认为private访问修饰符。
类的成员默认访问修饰符为private。

结构(struct)
结构成员默认为private修饰符。
结构成员无法声明为protected成员,因为结构不支持继承。

接口(interface)
默认访问基本为internal;但是如果在其他public类中使用时,必须为public。

猜你喜欢

转载自blog.csdn.net/jk_chen_acmer/article/details/83031853