【C#】【平时作业】习题-5-类的基础知识
一、概念题
1. 举例说明什么是类,什么是对象,并说明类与对象的关系?
类:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。
对象:对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
例如:狗类。大黄狗是狗类的其中一个对象
类与对象的关系就如模具和铸件的关系,类的实例化的结果就是对象,对象的抽象就是类。
类描述了一组有相同特性(属性)和相同行为的对象。
2. 什么是类的字段,字段有何作用
字段又称为"成员变量",一般在类的内部做数据交互使用,一般使用private使用
字段的通俗理解:字段就好比我们的个人财产,只供我们自己使用,所以一般是private修饰
作用:限制对象的属性或方法可访问的范围(类的内部,类的外部)
类型: private(私有的:外部不可见) public(共有的:外部可见的)
字段命名规范:字段命名一般采用camel命名法
添加标准:一个类中究竟需要添加几个字段,根据程序编写过程的需要决定
3. 举例说明什么是类的属性,属性有何作用?
属性其实是外部访问私有字段的入口,属性本省不保存任何数据
给属性赋值,其实是给属性指向的私有字段赋值
读取属性值,其实是获取属性指向的私有字段值或其它值
作用:在面向对象设计中主要使用属性描述对象静态特征
要求:一般采用Pascal命名法,数据类型和字段一致,使用public修饰
举例
# 字段
private int studentId;
# 属性
public int StudentId
{
get {return student}
set {studentID = value}
}
4. 举例说明C#中如何创建类的方法,方法的基本格式是什么?
[修饰符] 返回值类型 方法名 (参数类型 参数, 参数类型 参数)
{
// 方法体
//(返回值)
}
/// <summary>
/// 获取圆的直径
/// </summary>
/// <returns></returns>
public double getDiam()
{
return 2 * _radius;
}
5.public , private, protect, internal有何区别?
public 关键字是类型和类型成员的访问修饰符。公共访问是允许的最高访问级别,对访问公共成员没有限制。
protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。=
private 关键字是一个成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结构体中才是可访问的。
internal 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的。
6. 举例说明,什么是C#程序设计类的封装?
封装:将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系。
例如,封装一个Circle类
class Circle
{
//字段
public const double PI = 3.14;
private double _radius;
private double _centerX;
private double _centerY;
//属性
public double Radius { get => _radius; set => _radius = (value > 0 && value <= 50) ? value : 50; }
public double CenterX { get => _centerX; set => _centerX = (value > 0 && value <= 100) ? value : 50; }
public double CenterY { get => _centerY; set => _centerY = (value > 0 && value <= 100) ? value : 50; }
//构造函数
public Circle()
{
;
}
public Circle(double radius)
{
Radius = radius;
}
public Circle(double radius, double centerX, double cneterY)
{
Radius = radius;
CenterX = centerX;
CenterY = cneterY;
}
//功能方法
/// <summary>
/// 获取圆的直径
/// </summary>
/// <returns></returns>
public double getDiam()
{
return 2 * _radius;
}
/// <summary>
/// 获取圆的周长
/// </summary>
/// <returns></returns>
public double getPerimeter()
{
return 2 * PI*_radius;
}
/// <summary>
/// 获取圆的面积
/// </summary>
/// <returns></returns>
public double getArea()
{
return PI * _radius * _radius;
}
}
二、程序设计
1. 设计矩形类,并使用该类
class Rectangle
{
private double _length;
private double _width;
//构造函数
/// <summary>
/// 构造函数
/// </summary>
/// <param name="length"></param>
/// <param name="width"></param>
public Rectangle(double length, double width) {
_length = length;
_width = width;
//纠正赋值非法错误
if (_length <= 0 || _length > 50)
{
_length = 50;
}
if (_width <= 0 || _width > 50)
{
_width = 50;
}
Checklw();
}
//set/get
public double Length {
set => _length=(value > 0 && value <= 50) ? value : 50;
get => _length;
}
public double Width
{
set => _width = (value > 0 && value <= 50) ? value : 50;
get => _width;
}
//属性getter
public double getLength() { return _length; }
public double getWidth() { return _width; }
//属性setter
public void setLength(double length) {
if (length <= 0)
{
length = 1;
}
else if (length > 50)
{
length = 50;
}
_length = length;
}
public void setWidth(double width)
{
if (width <= 0)
{
width = 1;
}
else if (width > 50)
{
width = 50;
}
_width = width;
}
//功能方法
/// <summary>
/// 将长方形的长和宽放大一定倍数
/// </summary>
/// <param name="factor"></param>
/// <returns></returns>
public bool magnify(double factor)
{
Checklw();
this._length = _length * factor;
this._width = _width * factor;
if (this._length == _length * factor && this._width == _width * factor)
{
return true;
}
else
{
return false;
}
}
//计算长方形面积
public double ComputeArea()
{
Checklw();
return this._length * this._width;
}
/// <summary>
/// 计算长方形周长
/// </summary>
/// <returns></returns>
public double ComputePerimeter()
{
Checklw();
return (this._length + this._width)*2;
}
//要求长必须大于款
public void Checklw()
{
//纠正宽大于长的错误
if (_length < _width)
{
double temp = _length;
_length = _width;
_width = temp;
}
}
}
Rectangle cfx = new Rectangle(2222,333);
cfx.setLength(2);
cfx.setWidth(3);
lb1.Text += "长方形长为:"+cfx.getLength()+" | 长方形宽为:"+cfx.getWidth()+"\n";
lb1.Text += "周长为:" + cfx.ComputePerimeter().ToString() + "\n";
lb1.Text +="面积为:" +cfx.ComputeArea().ToString()+"\n";
2. 设计圆,并使用该类
//字段
public const double PI = 3.14;
private double _radius;
private double _centerX;
private double _centerY;
//属性
public double Radius { get => _radius; set => _radius = (value > 0 && value <= 50) ? value : 50; }
public double CenterX { get => _centerX; set => _centerX = (value > 0 && value <= 100) ? value : 50; }
public double CenterY { get => _centerY; set => _centerY = (value > 0 && value <= 100) ? value : 50; }
//构造函数
public Circle()
{
;
}
public Circle(double radius)
{
Radius = radius;
}
public Circle(double radius, double centerX, double cneterY)
{
Radius = radius;
CenterX = centerX;
CenterY = cneterY;
}
//功能方法
/// <summary>
/// 获取圆的直径
/// </summary>
/// <returns></returns>
public double getDiam()
{
return 2 * _radius;
}
/// <summary>
/// 获取圆的周长
/// </summary>
/// <returns></returns>
public double getPerimeter()
{
return 2 * PI*_radius;
}
/// <summary>
/// 获取圆的面积
/// </summary>
/// <returns></returns>
public double getArea()
{
return PI * _radius * _radius;
}.
private void btnCircle_Click(object sender, EventArgs e)
{
Circle circle = new Circle();
circle.Radius = 1;
lblCircle.Text+= "圆(" + circle.CenterX + "," + circle.CenterY + ") " +
"半径为" + circle.Radius + " " +
"直径为" + circle.getDiam() + "\n" +
"该圆的周长为:" +circle.getPerimeter()+"\n" +
"该圆的面积为:"+circle.getArea()+"\n";
lblCircle.Text += "--------------------------------\n";
circle.Radius = 999;
circle.CenterX = -999;
circle.CenterY = 25;
lblCircle.Text += "圆(" + circle.CenterX + "," + circle.CenterY + ") " +
"半径为" + circle.Radius + " " +
"直径为" + circle.getDiam() + "\n" +
"该圆的周长为:" + circle.getPerimeter() + "\n" +
"该圆的面积为:" + circle.getArea() + "\n";
}
【C#】【平时作业】习题-5-类的基础知识的更多相关文章
- 开发工具、Object类(java基础知识十一)
1.常见开发工具介绍 * A:操作系统自带的记事本软件 * B:高级记事本软件 * C:集成开发环境 IDE * (Integrated Development Environment) * ...
- 构造方法,重载,static,math类(java基础知识七)
1.构造方法概述和格式 * A:构造方法概述和作用 * 给对象的数据(属性)进行初始化 * B:构造方法格式特点 * a:方法名与类名相同(大小也要与类名一致) * b:没有返 ...
- UML 类图基础知识记录
UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 依赖(Dependency): 关联(Association): 聚合(Aggregation): 合成(Composition): 泛化 ...
- Es6对象的扩展和Class类的基础知识笔记
/*---------------------对象的扩展---------------------*/ //属性简写 ,属性名为变量名, 属性值为变量的值 export default functio ...
- C++ 类模板基础知识
类模板与模板类 为什么要引入类模板:类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类 ...
- 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)
1.正则表达式的概述和简单使用 * A:正则表达式(一个字符串,是规则) * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. * B: ...
- File类最基础知识
package File; /** * 创建一个文件: * 判断是否存在,若存在,则创建,若不存在,则删除,最后输出文件是否存在. */ import java.io.File; import jav ...
- C#基础知识之父子类,实例、静态成员变量,构造函数的执行顺序(经典示例)
父子类.示例.静态成员变量.构造函数的概念的基础理解完全可以利用下面的示例诠释,非常经典,直接上代码: public class ShowInfo { public ShowInfo(string i ...
- JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)
一:工具类 –不存储数据,而是在数据容器上,实现高效操作 • 排序 • 搜索 –Arrays类 –Collection类 二:Arrays类(处理数组) (一)基本方法 –排序:对数组排序, sort ...
- 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素
[源码下载] 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中 ...
随机推荐
- Data Summit 2022 大会资料分享(共23个)
Data Summit (数据峰会)是国际上关于数据管理.分析方面最新战略和技术研讨的顶尖峰会,通过行业领先的企业.专家的分享,共同探讨大数据和数据科学领域的发展现状与最新技术研究. 2022年5月1 ...
- 点亮PC13- 使用寄存器点亮
#include "stm32f10x.h" // Device header int main(void) { // 打卡GPIOC的时钟 RCC->APB2ENR = 0 ...
- 把数字转换RMB形式
方法1 : var str = '12345679' let strNew = str.replace(/\B(?=(?:\d{3})+\b)/g, ',') // 匹配单词边界替换为逗号 方法2: ...
- Spring 实现 3 种异步流式接口,干掉接口超时烦恼
大家好,我是小富- 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable.WebAsyncTask 和 DeferredResult.CompletableFuture等均可实现 ...
- HiT-SR:基于层级Transformer的超分辨率,计算高效且能提取长距离关系 | ECCV'24
Transformer在计算机视觉任务中表现出了令人鼓舞的性能,包括图像超分辨率(SR).然而,流行的基于Transformer的SR方法通常采用具有二次计算复杂度的窗口自注意力机制,导致固定的小窗口 ...
- 云原生周刊:Gateway API 1.0.0 发布 | 2023.11.6
开源项目推荐 Kueue Kueue 是一套用于作业队列的 API 和控制器.它是作业级管理器,可决定何时允许作业启动(如创建 pod),何时停止作业(如删除活动 pod). Reloader 一个 ...
- 格点拉格朗日插值与PME算法
技术背景 在前面的一篇博客中,我们介绍了拉格朗日插值法的基本由来和表示形式.这里我们要介绍一种拉格朗日插值法的应用场景:格点拉格朗日插值法.这种场景的优势在于,如果我们要对整个实数空间进行求和或者积分 ...
- Rsync 秒杀一切备份工具,你能手动屏蔽某些目录吗?
引言 Rsync 是一种快速且通用的命令行实用程序,可通过远程shell在两个位置之间同步文件和文件夹. 使用 Rsync,可以镜像数据,创建增量备份,并在系统之间复制文件.复制数据时,你可能要根据文 ...
- Ubuntu 22.04 安装 Nvidia 驱动最方便安全的方式
刚安装好的 Ubuntu 22.04 没有 N 卡驱动,输入 nvidia-smi,提示没有此程序并推荐到 apt 安装. 但是,使用 apt 安装 nvidia 驱动会有极大概率出现启动黑屏和闪屏问 ...
- 工作中的技术总结_ thymeleaf的应用 _select&input的数据回显 _20210910
工作中的技术总结_ thymeleaf的应用 _select&input的数据回显 _20210910 在需要用户输入的场合,常常会有对用户填入数据的验证,对数据的验证不通过则需要返回到表单页 ...