【问题标题】:C# When to use properties [duplicate]C#何时使用属性[重复]
【发布时间】:2020-07-28 05:28:57
【问题描述】:

首先,我几天前开始学习 C#,目前我在“Set/Get”章节。 所以我的教程中出现的每一个新东西我都会尝试将它应用到我的小应用程序上。 即使我不理解这些概念,我也会去其他地方寻找建议,但事实并非如此。

我认为也许在类计算器中我可以添加一个集合并获取,所以我不必在每个方法上声明 num1、num2 变量? (Sumar、Restar、除法、乘法)

class Calculo
{

    public static void Suma()
    {

        int num1, num2 = 0;
        Console.Write(" Ingrese el primer numero que quiere sumar: ");
        num1 = Convert.ToInt32(Console.ReadLine());
        Console.Write(" Ingrese el segundo numero que quiere sumar: ");
        num2 = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine(" Resultado es:   " + (num1 + num2));
    }

    public static void Resta()
    {

        int num1, num2 = 0;
        Console.Write(" Ingrese el primer numero que quiere restar: ");
        num1 = Convert.ToInt32(Console.ReadLine());
        Console.Write(" Ingrese el segundo numero que quiere restar: ");
        num2 = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine(" Resultado es: " + (num1 - num2));
    }

    public static void Division()
    {

        int num1, num2 = 0;
        Console.Write(" Ingrese el primer numero que quiere Dividir: ");
        num1 = Convert.ToInt32(Console.ReadLine());
        Console.Write(" Ingrese el segundo numero que quiere Dividir: ");
        num2 = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine(" Resultado es: " + (num1 / num2));
    }

    public static void Multiplicacion()
     {

        int num1, num2 = 0;
        Console.Write(" Ingrese el primer numero que quiere multiplicar: ");
        num1 = Convert.ToInt32(Console.ReadLine());
        Console.Write(" Ingrese el segundo numero que quiere multiplicar: ");
        num2 = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine(" Resultado es: " + (num1 * num2));
    }

}

谢谢!

@乔舒亚·乔治

那么这是在我的程序中使用这个新类的正确方法吗?

...

    public static void Multiplicacion()
     {

        MyClass numbers = new MyClass();
        Console.Write(" Ingrese el primer numero que quiere multiplicar: ");
        numbers.Num1 = Convert.ToInt32(Console.ReadLine());
        Console.Write(" Ingrese el segundo numero que quiere multiplicar: ");
        numbers.Num2 = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine(" Resultado es: " + (numbers.Num1 * numbers.Num2));
    }

...

【问题讨论】:

  • 由于每个方法完全负责请求输入,进行计算,然后输出结果,因此您不需要共享状态。属性用于共享状态,在这种情况下您不需要它。您可以通过将变量的声明从 ToInt32 向下移动到初始化它的位置来从每个方法中删除 1 行代码,还要注意 int num1, num2 = 0; 只会初始化 num2num1 仍然保持未初始化状态。
  • 你应该查一下static是什么意思。然后你可以尝试创建一个带参数的方法并返回一个结果
  • @LasseV.Karlsen 所以在我的特殊情况下,假设我想添加另一个选项来计算圆的面积和周长,PI 可以用作属性。对吗?
  • PI 已经存在,如Math.PI,但如果不存在,那么是的,您可以这样做。
  • @LasseV.Karlsen 没有进入数学课...谢谢!!!

标签: c# properties


【解决方案1】:

所以我们使用 get 和 set 的原因是为了封装,这意味着我们要确保隐藏敏感数据。在您的情况下,您可以作为示例创建一个新类(MyClass)并在该类中具有属性num1num2。在 MyClass 中,您可以执行以下操作:

class MyClass
{

    private int _num1 = 0;
    private int _num2 = 0;

    public int Num1
    {
        get { return _num1;}
        set { _num1 = value;}
    }

    public int Num2
    {
        get { return _num2;}
        set { _num2 = value;}
    } 
}

然后在你的 Calculo 类中你可以这样做:

MyClass numbers = new MyClass()
numbers.Num1 = Convert.ToInt32(Console.Readline())
numbers.Num2 = Convert.ToInt32(Console.Readline())

编辑: 实现MyClass 的另一种方法是

class MyClass {
   public int num1 {get;set;}
   public int num2 {get;set;}
}

这样您就可以使用自动实现的属性,而不必显式地编写 get-set 逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2018-03-04
    • 2011-02-04
    • 2014-02-06
    • 1970-01-01
    • 2012-11-23
    • 2015-05-22
    相关资源
    最近更新 更多