首页
关于
文章打赏记录
Search
1
项目一:Revit电缆自动布置
29 阅读
2
第十四章结课考试
3 阅读
3
revit二次开发入门
3 阅读
4
Dynamo 连缀属性
2 阅读
5
Dynamo 为当前视图添加过滤器
1 阅读
Dynamo
UnrealEngine
Python
C#编程技术基础
C#实战项目
随笔
登录
Search
标签搜索
CSharp
基础知识
Dynamo
数据应用
UnrealEngine
BIM管理
TomHanck4
累计撰写
22
篇文章
累计收到
6
条评论
首页
栏目
Dynamo
UnrealEngine
Python
C#编程技术基础
C#实战项目
随笔
页面
关于
文章打赏记录
搜索到
9
篇与
的结果
2022-06-09
第九章常用类
第九章常用类目标{dotted startColor="#ff6c6c" endColor="#1989fa"/}Math类为三角函数、对数函数和其他通用数学函数提供常数和静态方法对数字变量提供操作方法系统类,只需会操作 class Program { static void Main(string[] args) { //Math类是一个静态类 Console.WriteLine(Math.PI);//圆周率 Console.WriteLine(Math.Abs(-2));//返回自然数的绝对值 Console.WriteLine(Math.Acos(0.5));//返回余弦值为指定数字的角度(单位为弧度) Console.WriteLine(180*Math.Acos(0.5)/Math.PI);//返回余弦值为指定数字的角度 Console.WriteLine(Math.Floor(6.7));//对小数向下取整 Console.WriteLine(Math.Round(6.7));//返回四舍五入的值 Console.WriteLine(Math.Sqrt(9));//返回指定数的平方根 Console.WriteLine(Math.Pow(3, 2));//求一个数的指定次幂 } }{dotted startColor="#ff6c6c" endColor="#1989fa"/}Random类命名空间:System伪随机生成器伪随机数是以相同的概率从一组有限的数字中选取的。所选数字并不具有完全的随机性,因为它们是一种确定的数学算法选择的,但是从实用的角度而言,其随机程度已经够用。class Program { static void Main(string[] args) { //Random类是用来产生随机数的一个系统类 // 第一种实例化 Random rd = new Random(); Console.WriteLine(rd.Next());//返回一个随机数 Console.WriteLine(rd.Next(10));//返回一个指定最大值的随机数 Console.WriteLine(rd.Next(100,200));//返回一个指定范围的随机数 //第二种实例化 Random rd2 = new Random(6); for (int i = 0; i < 10; i++) { Console.Write(rd2.Next(100,200)+" "); } } }{dotted startColor="#ff6c6c" endColor="#1989fa"/}DateTime类一个结构体,它表示时间上的一刻,通常以日期和当天的时间表示构造函数Datetime静态属性NowToday static void Main(string[] args) { //DateTime是表示时间的结构体 Console.WriteLine(DateTime.IsLeapYear(2024)); //年份是否是闰年 Console.WriteLine(DateTime.Now);//获取此计算机上的当前时间 Console.WriteLine(DateTime.Now.AddYears(3));//在当前时间的基础上加上相应的日期 Console.WriteLine(DateTime.Today);//获取此计算机上的当前日期,时间为0 Console.WriteLine(DateTime.Today.ToLongDateString());//获取此计算机上的当前日期 Console.WriteLine(DateTime.Today.ToShortDateString());//获取此计算机上的当前日期 Console.WriteLine(DateTime.Now.ToLongTimeString());//获取此计算机上的当前时间,时分秒 Console.WriteLine(DateTime.Now.ToShortTimeString());//获取此计算机上的当前时间,时分 Console.WriteLine(DateTime.Now.ToString());//获取此计算机上的当前时间 Console.WriteLine(DateTime.Now.ToString());//获取当地的时间 }{dotted startColor="#ff6c6c" endColor="#1989fa"/}String类和StringBUilder类System.String类具有不变性和string关键字对应可以使用“+”连接多个字符串可以使用索引器提取字符频繁的插入、删除或替换操作就会明显的降低性能StringBuilder类具有可变性只能进行增、删、改操作Length,属性获取字符串的实际长度,Capacity属性获取字符串占据的内存容量实例 static void Main(string[] args) { //String和StringBuiler都是和字符串有关的类 //String类 string str = "你好," + "我是FSY,我是FSY,我是FSY"; Console.WriteLine(str); Console.WriteLine(str.Length);//计算字符串的长度,空格也算 Console.WriteLine(str.Remove(3,5));//从0开始计算,删除后面的字符 Console.WriteLine(str.Replace("F", "Y"));//替换指定字符 Console.WriteLine(str.Insert(3,"1"));//插入字符的位置及字符 Console.WriteLine(str.Substring(3,5));//从字符串中提取一些字符 Console.WriteLine("======================================================"); //按照指定规则分割字符串 string[] arr = str.Split(','); //遍历输出数组中的元素 foreach (string item in arr) { Console.WriteLine(item+"*"); } Console.WriteLine("========================================================"); //StringBuilder具有可变性 StringBuilder sb = new StringBuilder("Hello World"); Console.WriteLine(sb.Capacity);//字符串在内存中的容量 sb.Append("!你好,世界!");//在字符串后追加内容 Console.WriteLine(sb); Console.WriteLine(sb.Capacity);//字符串在内存中的容量 sb.Remove(3, 5);//将指定范围的字符从此实例中移除 Console.WriteLine(sb); }{dotted startColor="#ff6c6c" endColor="#1989fa"/}正则表达式引入System.Text.RegularExpressionsi命名空间Regex包含了正则表达式,以及使用正则表达式的各种方法。MathchCollction包含了一个正则表达式找到的所有匹配项。Match包含了一次匹配中所有匹配的文本。GroupCollection包含了一次匹配中的所有分组。Group包含了一个分组集合中一个组的细节。CaptureCollection包含一个组的所有Capture对象。Capture返回组内一次捕获所匹配的字符串。Regex类构造方法Regex(string pattern);Regex(string pattern,RegexOptions options);标志描述IgnoreCase忽略大小写,默认是区分大小写的None不设定标志,这是默认选项MultiLine指定了^和$可以匹配行的开头和结尾,以及字符串的开头和结尾。也就是说,使用换行符分隔,在每一行都能得到不同的匹配。但“.”仍然不匹配换行符IsMatch()方法实例方法New regex静态方法Regex.IsMatch实例 class Program { static void Main(string[] args) { //第一种:创建正则表达式对象 Regex rg = new Regex("ABC"); string str = "there is much ABC"; //使用IsMatch方法对字符串进行匹配 Console.WriteLine(rg.IsMatch(str)); //第二种:创建正则表达式对象 Regex reg = new Regex("ABC", RegexOptions.IgnoreCase);//不区分大小写 string str1 = "there is much AbC"; Console.WriteLine(reg.IsMatch(str1)); }Replace()方法实例方法New regex静态方法Regex.Replace实例Console.WriteLine(Regex.Replace("舔狗得house", "得", "不得"));Split()方法静态方法public static string[]Split(string input,string pattern)public static string[]Split(string input,string pattern,RegexOptions options)实例方法 string[] strArr = Regex.Split("绿色生态,绿色生活,铜绿,人生赢家", "绿"); foreach (var item in strArr) { Console.WriteLine(item); }{dotted startColor="#ff6c6c" endColor="#1989fa"/}MathchCollction类Match类和MathchCollction类利用正则表达式进行匹配时往往匹配成功的次数不止1次,如果想知道每一个成功匹配的细节,则需要用Match类和MatchCollection类。Match类表示一次成功的匹配,MatchCollection类是一个Match对象的集合。我们可以使用Regex类的Match()方法来得到一个Match对象或者用Matchs()方法来得到一个MatchCollection对象C#正则表达式匹配字符之含义1、正则表达式的作用:用来描述字符串的特征。2、各个匹配字符的含义:, :表示除\n以外的单个字符 [] :表示在字符数组[门中罗列出来的字符任意取单个 | :表示”或"的意思 () :表示改变优先级或"提取组" * :限定前面的表达式出现0次或多次 + :限定前面的表达式出现1次或多次 ? :限定前面的表达式出现0次或1次 ^ :表示以表达式开头(例:^http表示字符串以"http"开头) $ :表示以表达式结尾(例:com$表示字符串以"com"结尾) \d :小写\d表示0-9之间的数字 \D :大写\D表示除了0-9之外的字符 \w :写\w表示[a-zA-Z0-9] \W :大写\W表示除了[a-zA-Z0-9]之外的字符 \s :小写\s表示非可见字符(如空格、tab、\r\n..........) \S :大写\S表示除了非可见字符之外的字符实例 string str3="a sailor went to sea to set,to see what he could see"; MatchCollection mc = Regex.Matches(str3,"se\\w");//\是分隔符,\w是一个字符 Console.WriteLine(mc.Count); foreach (Match item in mc) { Console.WriteLine(item); } //验证手机号 string phoneNum = "^1[0-9]{10}$";//手机号的规律 string tel = Console.ReadLine(); //判断用户输入的数字是不是手机号 if (Regex.IsMatch(tel,phoneNum)) { Console.WriteLine("是一个手机号"); } else { Console.WriteLine("随便了"); }总结掌握Math类及方法的使用掌握Randoma类及方法的使用掌握DateTime类及方法的使用System.String类的对象具有不变性System.Text.StringBuilder类的对象的内容可以改变Regex类可用正则表达式处理复杂的字符串问题
2022年06月09日
0 阅读
3 评论
0 点赞
2022-06-09
C#第二次大作业
一、选择题(每空2分,共10分)1、下列选项中,( )是引用类型。 A.enum类型 B.struct类型 C.string类型 D.int类型 2、下列描述错误的是( ) A.类不可以多重继承而接口可以; B.抽象类自身可以定义成员而接口不可以: C.抽象类和接口都不能被实例化: D.一个类可以有多个基类和多个基接口: 3、下列关于C#中索引器理解正确的是( ) A.索引器的参数必须是两个或两个以上 B.索引器的参数类型必须是整数型 C.索引器没有名字 D.以上皆非 4、下列关于构造函数的描述正确的是( ) A.构造函数可以声明返回类型。 B.构造函数不可以用private修饰 C.构造函数必须与类名相同 D.构造函数不能带参数 5、接口是一种引用类型,在接口中可以声明( ),但不可以声明公有的域或私有的成员变量 A.方法、属性、索引器和事件: B.方法、属性信息、属性; C.索引器和字段; D.事件和字段:二、填空题(每空2分,共20分)1、C#的数据类型有值类型和_________________。 2、面向对象是一种新兴的程序设计方法,面向对象的基本特征有_________________、_________________、_________________。 3、构造函数在_________________时被调用。 4、类是一种数据结构,它使用_________________关健字声明。 5、类声明后,可以创建类的实例,创建类的实例要使用_________________关键字。 6、一个接口定义一个协定。实现接口的类或结构必须遵守其协定。接口的声明格式为:_________________。 7、抽象类是一种不能直接创建对象的类,通常是部分实现的或者完全不实现。抽象类使用关键字_________________来声明。 8、创建新对象时将调用类的_________________。它主要用来为对象分配存储空间,完成初始化操作。三、编程题(共70分) 1、编写一个接口ITest,,包含两个方法GetArea()和GetZC(),分别用来求圆的面积和周长 定义一个类Circle来实现接口Test里面的方法,分别输出圆的面积和周长,并声明一个double数据类型的字段半径R,写一个有参的构造方法用来初始化半径R,(要求必须写无参构造方法) 在Program类里面初始化一个对象cir来分别调用求周长和面积的方法(30分) (接口10分,类的构造方法5分,继承5分,方法的实现10分,主入口测试5分) 2、创建Calculate基类,其中包含两个整型的protected成员,用以接收用户输入的两个整数。定义一个DisplayResult()虚方法,计算并显示结果 定义四个类(One、Two、Three、Four)派生自Calculate类,分别重写DisplayResult()虚方法,分别实现两个整数的加、减、乘、除运算并输出结果 实例化四个对象,分别调用四个类里面的方法实现加、减、乘、除(40分) (基类中protected成员4分,虚方法6分:派生类20分,每个5分:实例化四个对象并调用方法实现加减乘除10分)
2022年06月09日
0 阅读
0 评论
0 点赞
2022-06-07
第八章抽象类和接口
第八章抽象类和接口目标{dotted startColor="#ff6c6c" endColor="#1989fa"/}抽象类和抽象方法用来列举一个类所需要的行为不明确提高具体实现方法必须有其子类实现它的抽象方法抽象方法·只指明方法的返回值类型、方法名称及参数,而不提供方法的实现。抽象类语法[访问修饰符]abstract class类名 { 代码 }抽象类案例 abstract class People//抽象类 { string name; string sex; public string Name { get => name; set => name = value; }//字段封装 public string Sex { get => sex; set => sex = value; }//字段封装 /*public virtual void Speak() { Console.WriteLine("大家好,我是一个人"); }*/ public abstract void Speak();//把Speak定义为抽象方法,使用关键字abstract }抽象类特性抽象类不能实例化抽象类可以包含抽象方法和抽象访问器不能用sealed修饰符修改抽象类,这意味着抽象类不能被继承从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现抽象类里面只有方法的声明,没有方法的主体抽象方法不能是静态的,不能用static抽象方法不能标记为virtual抽象类注意事项注意:(1)抽象方法只能在派生类中才能真正实现(2)一个类中只要有一个抽象方法,该类必须定义为抽象类(3)抽象方法只指明返回值类型、方法名称及参数(4)定义成抽象方法的目的在于指定派生类必须实现这一方法的功能(5)抽象类可以有构造方法,但是构造方法不能直接被调用而只能由派生类的构造方法调用虚方法和抽象方法虚方法抽象方法用virtual修饰用abstract修饰要有方法体,哪怕是一个分号不允许有方法体可以被子类override必须被子类override除了密封类都可以写只能在抽象类中{dotted startColor="#ff6c6c" endColor="#1989fa"/}接口全部是为实现的方法语法[属性][修饰符]interface 接口名 { //接口主体 }接口中只能声明方法、属性、索引器和事件接口不能声明字段、构造方法、常量和委托接口的成员默认是public的,如果明确指定成员的访问级别会报编译错误接口中所有的方法、属性和索引器都必须没有实现C#中的接口以大写字母“I”开头接口定义内容//定义接口,定义后不需要改变,需要不同功能,继承时扩展即可 interface IPrint { void Print(); //只定义,不实现 //IPerson(); //错误,未写返回值 //string name; //错误,定义字段 //public void GetlDcard(); //错误,指定访问级别 //void GetName(); //正确 //void GetAge(string s); //正确 //int GetHeight(); //正确 }使用接口类实现接口与继承一样,需要使用冒号运算符与抽象类不同的是,类是实现了接口中的方法而不是重写,所以实现接口的方法时不需要override关键字。//A继承接口 class A IPrint { //实现接口方法,必须有,//当然还可以再添加其它的字段、属性、方法 public void Print() { System.Console.WriteLine("A"); } } //B继承接口 class B:IPrint { public void Print() { System.Console.WriteLine("B"); } }using System.Collections.Generic; using System.Text; using System.Threading; namespace AppTest { class Demo interface { static void Main(string[]args) { //使用(注意,这里是使用接口IPirnt,下面是不同的实例,获得不同功能) IPrint I; I=new A();//实例化A,将打印出A I.Print(); I=new B();//实例化B,将打印出B I.Print(); Thread.Sleep(3*1000);//暂停3秒,看打印结果 } } }思考写的不错,不过这个例子还缺少一部分,人家可以说我可以在基类上定义Print(),PrintPreview()2个虚函数,让后续不同打机的类继承这个基类,override虚函数,然后通过基类指针一样可以实现这个功能。如果你这么说,如果要给HP打印机和IBM打印机增加一个新功能如Scan(),如果用基类虚函数就得重新修改基类,基类修改会影响到所有继承他的类,系统成型后修改基类是非常危险的,而用接口只需让HP的,IBM的打印类再继承一个Scan接口就行了,不会影响到其他类,这就是接口优越于虚函数的地方。{dotted startColor="#ff6c6c" endColor="#1989fa"/}接口作为方法的参数继承基类并实现接口一个类既可以派生自另一个类还可以同时实现某个接口一个类继承基类同时又实现接口时基类名要写在接口名的前面多重接口实现一个类可以同时实现多个接口实现多个接口只需要在定义类时在后面添加一个逗号和接口名类的代码中实现新接口的所有方法语法 static void Main(string[] args) { IPrint iHp = new PrintHP(); IPrint iIBM = new PrintIBM(); PrintPhoto(iHp); PrintPhoto(iIBM); } //打印照片的方法 public static void PrintPhoto(IPrint i)//接口作为参数 { i.Print(); }接口作为参数的意义实际上要接收的是一个实现这个接口的对象每个实现该接口的对象代码不一样,那么传递给方法执行时的结果也就不一样。通过接口也就实现了多态接口的绑定接口绑定就是把不同的接口合在一起一个新的接口 //用接口继承接口,就是接口的绑定 interface ISumSports:ISports,ILaLaDui { void KaiMuShi(); }{dotted startColor="#ff6c6c" endColor="#1989fa"/}is和as关键字is测试一个实例是不是另一个类型as同is同时把实例转换为另一种类型,如果转换不成功则返回null static void Main(string[] args) { //is关键字:判断一个实例是不是另一种数据类型,返回值为true或者false Sports s1 = new Sports(); if (s1 is ISports) { s1.KaiMuShi(); } else { s1.Sing(); } //as关键字,同is,把一种类型作为另一种类型使用,如果转换成功,返回目标数据类型,转换不成功,返回null; ISumSports isum = s1 as ISumSports; if (isum !=null) { isum.Dance(); } else { isum.QianQiu(); }抽象类与接口比较{dotted startColor="#ff6c6c" endColor="#1989fa"/}总结抽象方法没有代码实现的方法,使用abstract关键字修饰抽象类使用abstract关键字修饰是指包含0到多个抽象方法的类抽象类不能实例化含有抽象方法的类必须是抽象类重写抽象类的方法也用override关键字接口使用interface关键字修饰接口中只定义方法的原型,接口中不能有字段和常量继承接口的类必须实现接口中所有的方法才能实例化is和as关键字测试一个实例是不是另一个类型as同时把实例转换为另一种类型,如果转换不成功则返回null
2022年06月07日
0 阅读
0 评论
0 点赞
2022-06-06
第七章面向对象之继承与多态
继承的基本概念继承中的构造方法密封类多态重载(见第四章第四节)同一类中方法名相同参数不同重写子类中对父类的方法进行修改或者重新编写父类的对象可以指向子类的实例,并且调用子类重写重写的步骤在父类中把某个方法定义为虚方法,使用virtual关键字 class People { public virtual void Speak() { Console.WriteLine("大家好!我是一个人!"); } }在子类中使用override关键字重写父类的虚方法 class Student:People//继承 { public override void Speak() { Console.WriteLine("大家好,我是一名学生,我叫{0},性别{1},年龄{2}",name,sex,age); } }总结继承子类可以继承父类的非私有成员。不能继承父类的构造方法,子类构造方法会自动调用父类构造方法,并且父类构造方法先执行,再执行子类构造方法。使用 base关键字显示调用父类构造方法。base关键字还可以访问父类成员。protectedi访问修饰符修饰的成员可以被子类和本身访问,其他类访问不了。密封类sealed关键字修饰的类,表示不能被其他类继承。多态是指二个或多个不同的类,对同一方法的不同代码实现。virtual、override关键字,子类重写父类的虚方法。父类对象可以引用子类实例,并且调用子类重写的方法。
2022年06月06日
0 阅读
0 评论
0 点赞
1
2