【问题标题】:C# Getter SetterC# 获取器设置器
【发布时间】:2014-03-21 22:44:20
【问题描述】:

我正在做与分数有关的作业。我想阻止用户为分母(“nenner”)和分子(“zähler)输入小于 1 的数字。我尝试使用 set 来实现,但它不起作用。如果分子/分母小于 1我希望将它们设置为 1。任何关于我代码中错误的提示都将不胜感激。

namespace Aufgabenblatt2
{
class Bruch
{
    private int zähler;
    public int Zähler
    {
        get { return zähler; }
        set 
        {
            if (value < 1)
            {
                //Console.WriteLine("Keine negativen Brüche und Division durch 0 erlaubt! Wert wurde auf 1 gesetzt");
                zähler = 1;
            }
            else
                zähler = value; 
        }
    }

    private int nenner;
    public int Nenner
    {
        get { return nenner; }
        set
        {
            if (value < 1)
            {
                //Console.WriteLine("Keine negativen Brüche und Division durch 0 erlaubt! Wert wurde auf 1 gesetzt");
                nenner = 1;
            }
            else
                nenner = value;
        }
    }


    public Bruch(int zähler, int nenner)
    {
        this.zähler = zähler;
        this.nenner = nenner;
    }

    /// <summary> 
    /// addiert zum Bruch einen weiteren hinzu 
    /// </summary> 
    /// <param name="summand">Summand</param> 
    /// <returns>Summe</returns> 
    public Bruch Addiere(Bruch summand)
    {
        Bruch ergebnis = new Bruch(this.zähler * summand.nenner + summand.zähler * this.nenner, this.nenner * summand.nenner);
        return ergebnis;
    }

    public override string ToString()
    {
        return String.Format("{0}/{1}", this.zähler, this.nenner);
    }
}
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Eingabe erster Zähler:");
        int zähler1 = Convert.ToInt32(Console.ReadLine());       //Read numerator value from console and save to int zähler
        Console.Write("Eingabe erster Nenner:");
        int nenner1 = Convert.ToInt32(Console.ReadLine());       //Read denominator value from console and save to int nenner

        Bruch b1 = new Bruch(zähler1, nenner1);      


        Console.Write("Eingabe zweiter Zähler:");
        int zähler2 = Convert.ToInt32(Console.ReadLine());       //Read second numerator
        Console.Write("Eingabe zweiter Nenner:");
        int nenner2 = Convert.ToInt32(Console.ReadLine());       //Read second denominator

        Bruch b2 = new Bruch(zähler2, nenner2);      

        Console.WriteLine("{0} + {1} = {2}", b1, b2, b1.Addiere(b2));   //Print both fractions, compute and print sum on Console

        Console.ReadLine();
    }
}

}

【问题讨论】:

  • 您应该将代码示例的焦点缩小到您感到困惑的部分。就目前而言,我不知道你的问题是什么。
  • +1 立即提到这是家庭作业
  • 如果你运行这个,输出是什么?你怎么称呼这些getter-setter?

标签: c# getter-setter


【解决方案1】:

你不使用你的二传手。在Bruch b1 = new Bruch(zähler1, nenner1);,您在构造函数中设置字段,而不是属性

更改您的构造函数以设置属性:

public Bruch(int zähler, int nenner)
{
    Zähler = zähler;
    Nenner = nenner;
}

您可以通过在设置器处设置断点并查看它们从未被调用来捕捉到这一点,然后通过代码跟踪到设置值的位置

【讨论】:

  • +1 用于断点建议。如果您认为 setter 或 getter 有问题,那么这始终是第一步,以确认它们确实被击中了。
  • 非常感谢,我现在明白了!我确实注意到没有调用 setter,但不明白为什么。
【解决方案2】:

你的问题在于你的构造函数:

public Bruch(int zähler, int nenner)
{
    this.zähler = zähler;
    this.nenner = nenner;
}

您的构造函数通过直接设置字段来绕过设置器。将其更改为:

public Bruch(int zähler, int nenner)
{
    this.Zähler = zähler;
    this.Nenner = nenner;
}

如果你这样做,你的二传手会被击中:

 b1.Zähler = 0; 
 Console.Writeline(b1.Zähler.ToString());     // should print 1

但是您的构造函数避开了这一点。当您的属性和支持字段仅因大小写而异时,这是您遇到的问题之一。它们很容易混淆。这是在支持字段前加上_ 之类的前缀的一个很好的论据,尽管我个人并不喜欢这种风格。

【讨论】:

    【解决方案3】:

    你没有在构造函数中使用setter!

    public Bruch(int zähler, int nenner)
    {
        this.Zähler = zähler; // << Use the setter here! 
        this.Nenner = nenner;
    }
    

    关于不同的主题:不使用“元音变音”作为变量名是一种更好的风格。始终使用英文名称。

    【讨论】:

    • “不使用“Umlaute”作为变量名是一种更好的风格。始终使用英文名。” - 这是一种意见。
    • 如果您在国际团队工作,非德国开发人员将很难理解您的代码。
    • 如果您不这样做,或者如果问题域不容易翻译成英文,则可以使用项目团队的母语编写变量。这是一个古老而持续的讨论,所以我只是想说你不应该把它说成一个事实。 :-)
    • 我同意避免使用元音变音(或其他时髦字符),但使用团队中每个人都能理解的变量名称,无论是英语还是德语或其他。当然,如果您要在 StackOverflow 等英语网站上发帖,您可能会发现很多人会跳过您的问题,因为他们无法立即掌握您的变量名称。
    【解决方案4】:

    那是因为你设置了错误的参数。将Bruch 上的构造函数替换为这个。

    public Bruch(int zähler, int nenner)
    {
        this.Zähler = zähler;
        this.Nenner = nenner;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      相关资源
      最近更新 更多