c#划水快速入门 1

C#入门

这个是我自己写的一些有关c#的学习笔记,主要目的也是为了unity的学习铺路
这篇文章大概涉及到正则表达式之前,正则表达式个人仍然无法理解以及没有找到比较好的例子
文章中的许多代码都是借鉴甚至是复制菜鸟的,但是个人也有做出一些注释。
以及有一些代码我直接简化了,直接可以做到一目了然。
有一些地方我个人觉得学习的不是很仔细,可能笔记有疏漏甚至错误
比如类和结构体的地方。
正则表达式那里我直接复制了一些内容,下一次发博客希望可以解决这个问题。

c#的基本语法

首先来看一下c#的基本语法的样子

using System;//引用系统
namespace RectangleApplication//命名空间声明
{
    class Rectangle//声明类
    {
        // 成员变量
        double length;
        double width;
        public void Acceptdetails()
        {
            length = 4.5;    
            width = 3.5;
        }
        public double GetArea()
        {
            return length * width;
        }
        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }
    
    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();//创建类

            r.Acceptdetails();
            r.Display();
            Console.ReadLine();
        }
    }
}   

类型转换

i = (int)d;转换为整数型

变量初始化

int d = 3, f = 5; /* 初始化 d 和 f. /
byte z = 22; /
初始化 z. /
double pi = 3.14159; /
声明 pi 的近似值 /
char x = ‘x’; /
变量 x 的值为 ‘x’ */

关于类的声明

1、有时候vs会提示方法的首字母要大写

2、类中的变量要加上private或者public
其中public就是公共变量,可以新建这个类以后被访问
private就是私有的,只能由这个类里面的函数进行访问。

3、使用类的时候的声明结构

类名称 对象名称(这个是自己定的) = new 类名称();
4类的访问

封装

封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。

抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象。

C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现。

一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:

public:所有对象都可以访问;
private:对象本身在对象内部可以访问;
protected:只有该类对象及其子类对象可以访问
internal:同一个程序集的对象可以访问;
protected internal:访问限于当前程序集或派生自包含类的类型。

方法 方法的声明

class NumberManipulator
{
public int FindMax(int num1, int num2)
{
    /* 局部变量声明 */
    int result;

    if (num1 > num2)
        result = num1;
    else
        result = num2;

    return result;
}
...
}

可空类型

https://www.runoob.com/csharp/csharp-nullable.html
其实就是
类型? 数值
如果这样的语句类型和数值的类型不对应则会返回null 否则返回这个数值

声明数组

类型[] 数组名称
double[] balance;

结构体 c#中的结构体

struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};

结构体也可以使用方法

C#中结构体和类的使用方法大致相同
也就是
类型 变量名 = new 类型();
下面是结构体的用法

using System;
using System.Text;
    
struct Books
{
private string title;
private string author;
private string subject;
private int book_id;
public void getValues(string t, string a, string s, int id)
{
    title = t;
    author = a;
    subject = s;
    book_id =id; 
}
public void display()
{
    Console.WriteLine("Title : {0}", title);
    Console.WriteLine("Author : {0}", author);
    Console.WriteLine("Subject : {0}", subject);
    Console.WriteLine("Book_id :{0}", book_id);
}

};  

public class testStructure
{
public static void Main(string[] args)
{

    Books Book1 = new Books(); /* 声明 Book1,类型为 Book */
    Books Book2 = new Books(); /* 声明 Book2,类型为 Book */

    /* book 1 详述 */
    Book1.getValues("C Programming",
    "Nuha Ali", "C Programming Tutorial",6495407);

    /* book 2 详述 */
    Book2.getValues("Telecom Billing",
    "Zara Ali", "Telecom Billing Tutorial", 6495700);

    /* 打印 Book1 信息 */
    Book1.display();

    /* 打印 Book2 信息 */
    Book2.display(); 

    Console.ReadKey();

}
}

稍微区别但是其实很像的结构体和类

具体看这里https://www.cnblogs.com/OpenCoder/p/10000006.html
总结一下其实就是
1、类的变量可以被初始化,但是会被系统自动放入对应的函数中
结构体的变量不能进行初始化
2、结构体的变量可以不用new 比如可以 结构体名称 变量名;来创建结构体变量

正则表达式

C#正则常用表达式

㈠校验数字的表达式
复制代码

//数字
        Regex reg = new Regex(@"^[0-9]*$");
        //n位的数字
        Regex reg = new Regex(@"^\d{n}$");
        //至少n位的数字
        Regex reg = new Regex(@"^\d{n,}$");
        //m-n位的数字
        Regex reg = new Regex(@"^\d{m,n}$");
        //零和非零开头的数字
        Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");
        //非零开头的最多带两位小数的数字
        Regex reg = new Regex(@"^([1-9][0-9]*)+(.[0-9]{1,2})?$");
        //带1-2位小数的正数或负数
        Regex reg = new Regex(@"^(\-)?\d+(\.\d{1,2})?$");
        //正数、负数、和小数
        Regex reg = new Regex(@"^(\-|\+)?\d+(\.\d+)?$");
        //有两位小数的正实数
        Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");
        //有1~3位小数的正实数
        Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,3})?$");
        //非零的正整数
        Regex reg = new Regex(@"^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$");
        //非零的负整数
        Regex reg = new Regex(@"^\-[1-9][]0-9″*$ 或 ^-[1-9]\d*$");
        //非负整数
        Regex reg = new Regex(@"^\d+$ 或 ^[1-9]\d*|0$");
        //非正整数
        Regex reg = new Regex(@"^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$");
        //非负浮点数
        Regex reg = new Regex(@"^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$");
        //非正浮点数
        Regex reg = new Regex(@"^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$");
        //正浮点数
        Regex reg = new Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$");
        //负浮点数
        Regex reg = new Regex(@"^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$");
        //浮点数
        Regex reg = new Regex(@"^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$");

复制代码

㈡校验字符的表达式
复制代码

//汉字
        Regex reg = new Regex(@"^[\u4e00-\u9fa5]{0,}$");
        //英文和数字
        Regex reg = new Regex(@"^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$");
        //长度为3-20的所有字符
        Regex reg = new Regex(@"^.{3,20}$");
        //由26个英文字母组成的字符串
        Regex reg = new Regex(@"^[A-Za-z]+$");
        //由26个大写英文字母组成的字符串
        Regex reg = new Regex(@"^[A-Z]+$");
        //由26个小写英文字母组成的字符串
        Regex reg = new Regex(@"^[a-z]+$");
        //由数字和26个英文字母组成的字符串
        Regex reg = new Regex(@"^[A-Za-z0-9]+$");
        //由数字、26个英文字母或者下划线组成的字符串
        Regex reg = new Regex(@"^\w+$ 或 ^\w{3,20}$");
        //中文、英文、数字包括下划线
        Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9_]+$");
        //中文、英文、数字但不包括下划线等符号
        Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$");
        //可以输入含有^%&’,;=?$\”等字符
        Regex reg = new Regex(@"[^%&’,;=?$\x22]+");
        //禁止输入含有~的字符
        Regex reg = new Regex(@"[^~\x22]+");

复制代码

㈢特殊需求表达式
复制代码

 //Email地址
            Regex reg = new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
            //域名
            Regex reg = new Regex(@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?");
            //InternetURL
            Regex reg = new Regex(@"[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$");
            //手机号码
            Regex reg = new Regex(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$");
            //电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX)
            Regex reg = new Regex(@"^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$");
            //国内电话号码(0511-4405222、021-87888822)
            Regex reg = new Regex(@"\d{3}-\d{8}|\d{4}-\d{7}");
            //身份证号(15位、18位数字)
            Regex reg = new Regex(@"^\d{15}|\d{18}$");
            //短身份证号码(数字、字母x结尾)
            Regex reg = new Regex(@"^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$");
            //帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
            Regex reg = new Regex(@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$");
            //密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)
            Regex reg = new Regex(@"^[a-zA-Z]\w{5,17}$");
            //强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)
            Regex reg = new Regex(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$");
            //日期格式
            Regex reg = new Regex(@"^\d{4}-\d{1,2}-\d{1,2}");
            //一年的12个月(01~09和1~12)
            Regex reg = new Regex(@"^(0?[1-9]|1[0-2])$");
            //一个月的31天(01~09和1~31)
            Regex reg = new Regex(@"^((0?[1-9])|((1|2)[0-9])|30|31)$");
            //钱的输入格式:
            //有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”
            Regex reg = new Regex(@"^[1-9][0-9]*$");
            //这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0″不通过,所以我们采用下面的形式
            Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");
            //一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号
            Regex reg = new Regex(@"^(0|-?[1-9][0-9]*)$");
            //这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分
            Regex reg = new Regex(@"^[0-9]+(.[0-9]+)?$");
            //必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10” 和 “10.2” 是通过的
            Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");
            //这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样
            Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,2})?$");
            //这样就允许用户只写一位小数。下面我们该考虑数字中的逗号了,我们可以这样
            Regex reg = new Regex(@"^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$");
            //1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须
            Regex reg = new Regex(@"^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$");
            //备注:这就是最终结果了,别忘了”+”可以用”*”替代。如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
            //xml文件
            Regex reg = new Regex(@"^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$");
            //中文字符的正则表达式
            Regex reg = new Regex(@"[\u4e00-\u9fa5]");
            //双字节字符
            Regex reg = new Regex(@"[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))");
            //空白行的正则表达式,可用来删除空白行
            Regex reg = new Regex(@"\n\s*\r");
            //HTML标记的正则表达式
            Regex reg = new Regex(@"<(\S*?)[^>]*>.*?</\1>|<.*? />");// (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
            //首尾空白字符的正则表达式
            Regex reg = new Regex(@"^\s*|\s*$或(^\s*)|(\s*$)");// (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
            //腾讯QQ号
            Regex reg = new Regex(@"[1-9][0-9]{4,}"); //(腾讯QQ号从10000开始)
            //中国邮政编码
            Regex reg = new Regex(@"[1-9]\d{5}(?!\d)");// (中国邮政编码为6位数字)
            //IP地址
            Regex reg = new Regex(@"\d+\.\d+\.\d+\.\d+");// (提取IP地址时有用)
            //IP地址
            Regex reg = new Regex(@"((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))");

猜你喜欢

转载自blog.csdn.net/Yourset/article/details/107398007
今日推荐