首页
关于
文章打赏记录
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#实战项目
随笔
页面
关于
文章打赏记录
搜索到
22
篇与
的结果
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 点赞
2022-06-02
C#中的事件
事件使用的步骤定义委托定义事件 [访问修饰符] event 委托名 事件名订阅事件 事件名 +=new 委托(事件处理方法名);引发事件 事件名([参数列表]);定义引发事件方法定义事件处理程序触发事件
2022年06月02日
0 阅读
0 评论
0 点赞
2022-06-02
匿名方法
代码示例namespace Lesson6_2 { class Program { //1、定义委托 public delegate int Sum(int num1, int num2); static void Main(string[] args) { //2、实例化委托 //委托类型 委托实例名=new 委托名(方法签名); //用匿名方法实现实例化委托 Sum sum = delegate (int num1, int num2) { return num1 + num2; }; //3、使用委托 int all = 41 + sum(4, 5); Console.WriteLine(all); } } }
2022年06月02日
0 阅读
0 评论
0 点赞
1
2
3
4
5