c#对象和构造函数最佳实践
本文关键字:最佳 构造函数 对象 | 更新日期: 2023-09-27 18:03:35
namespace Area
{
public class Rectangle
{
private double length;
private double width;
public Rectangle() { }
public Rectangle(double length, double width)
{
this.Length = length;
this.Width = width;
}
public double Length
{
get
{
return length;
}
set
{
length = value;
}
}
public double Width
{
get
{
return width;
}
set
{
width = value;
}
}
public double getArea()
{
return width * length;
}
public double getPerimeter()
{
return 2 * width + 2 * length;
}
public double getDiagonal()
{
return Math.Sqrt(Math.Pow(width, 2) + Math.Pow(length, 2));
}
我想确保我使用c#对象的最佳实践。请参考以上例子。
1。有必要键入第一个空构造函数吗?在课堂上,老师总是每个项目都做,但从来没有真正回答为什么。
public Rectangle() {}
2。在我的自定义构造函数中,Visual Studio像这样生成它:这一点。
我知道"this"关键字在键入时是不必要的,但在课堂上,老师有时会把它改成小写,像这样:
。
但有时他不改变它。哪种方式是最佳实践?
左边是真正的Property吗?然后右边是场地?
所以,属性等于字段?
3。最后,在这种情况下,我能否直接输入我的属性:
公共字符串长度{get;设置;}
而不是Visual Studio生成return和value的方式。
很抱歉写了这么长一篇,我厌倦了在学校得到不同的答案,想要一个最后的答案,谢谢。
我建议你的类是这样的:
public class Rectangle
{
public Rectangle(double length, double width)
{
this.Length = length;
this.Width = width;
}
public double Length { get; set; }
public double Width { get; set; }
public double Area { get { return this.Width * this.Length; } }
public double Perimeter { get { return 2.0 * (this.Width + this.Length); } }
public double Diagonal { get { return Math.Sqrt(Math.Pow(this.Width, 2.0) + Math.Pow(this.Length, 2.0)); } }
}
-
请参阅此处了解为什么需要一个空构造函数。总而言之,添加一个非空构造函数将阻止编译器为您生成一个空构造函数(编译器假定,如果您需要它,您已经与您编写的其他构造函数一起定义了它)。有些事情,比如序列化,如果没有空白构造函数就无法工作,所以这就是您可能想要添加一个的原因。
-
在我的职业生涯中,我经常看到人们避免在构造函数中使用这个。也许"避免"这个词不太合适,但除非情况不清楚,否则他们就是懒得把它放在那里。
根据您的一些评论进行更新
public Rectangle(double length, double width)
{
Length = length; //parameter length assigned to field length by virtue of property Length
}
您将参数长度分配给属性length,该属性本身将传入的值分配给长度私有字段。因为c#是区分大小写的,Length和Length在任何情况下都不会混淆,你也不需要指定this关键字。
在带有参数length的方法中,当您键入length时,语言会假设您引用的是方法的参数。如果你想这样做:
public Rectangle(double length, double width)
{
length = length; //warning: Assignment made to same variable; did you mean to assign to something else
}
编译器不会尝试并假设您正在将属性分配给字段,而这只是将长度参数分配给自身。在这种情况下,您将使用this关键字告诉编译器,您希望将参数长度分配给私有字段长度,如下所示:
public Rectangle(double length, double width)
{
this.length = length; //no warning
}
结束更新
- 是的,您可以将属性声明为property {get;set;}。这个特性只在c# 3.0中出现,被称为自动实现属性(参见这个链接)。在此之前,必须自己提供实现。
我把我的class改成了:
public class Rectangle
{
public Rectangle(double length, double width)
{
Length = length;
Width = width;
}
public double Length { get; set; }
public double Width { get; set; }
public double getArea()
{
return Width * Length;
}
public double getPerimeter()
{
return 2 * Width + 2 * Length;
}
public double getDiagonal()
{
return Math.Sqrt(Math.Pow(Width, 2) + Math.Pow(Length, 2));
}
}
如果任何人有任何其他的反馈,你建议改变,请给它,我赶上非常快,想要学习正确的方法。