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的方式。

很抱歉写了这么长一篇,我厌倦了在学校得到不同的答案,想要一个最后的答案,谢谢。

c#对象和构造函数最佳实践

我建议你的类是这样的:

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)); } }
}
  1. 请参阅此处了解为什么需要一个空构造函数。总而言之,添加一个非空构造函数将阻止编译器为您生成一个空构造函数(编译器假定,如果您需要它,您已经与您编写的其他构造函数一起定义了它)。有些事情,比如序列化,如果没有空白构造函数就无法工作,所以这就是您可能想要添加一个的原因。

  2. 在我的职业生涯中,我经常看到人们避免在构造函数中使用这个。也许"避免"这个词不太合适,但除非情况不清楚,否则他们就是懒得把它放在那里。

根据您的一些评论进行更新

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));
            }
        }
    

    如果任何人有任何其他的反馈,你建议改变,请给它,我赶上非常快,想要学习正确的方法。