【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";
}