如何制作我的算术类模块化c#CLI程序

时间:2015-02-01 23:13:46

标签: c# variables console console-application modularity

背景

嘿伙计们,我现在正在学习软件设计课程,我对此非常困惑。

我决定编写一个程序,这样我就可以了解类的基本知识:类交互,我现在有两个类,一个算术类,它包含一些非常简单的方法,如multiply(),{{1等等。

和我的主类,它包含一个通过case语句的CLI菜单。

我要做的是让我的算术类模块化。

我的addition()ResultGen()方法包含randomNumberGen(),如果可能,我不希望此算术类必须依赖于存在的控制台类(因为我想要使用)这个算术类很快就会有一个GUI WPF程序。

我的问题是,

如何将我的Console.WriteLine方法中的monthyear变量转到我的主randomNumberGen()类,以便我可以格式化那些,我该怎么做从Program()过来的result变量也是?

我最好使用参数或getter和setter来解决这个问题而不是返回。

ResultGen()

这是我的主要计划:

    public int ResultGen()
    {
        Console.WriteLine("Result is equal to: " + result + ".");
        return result;
    }

    public void randomNumberGen()
    {
        Random rnd = new Random();
        month = rnd.Next(1, 11); // creates a number between 1 and 12
        year = rnd.Next(1, 21); // creates a number between 1 and 51
        Console.WriteLine("Month: " + month);
        Console.WriteLine("Year:  " + year);
    }

我感谢你们给予的任何帮助,但请记住,我是一名新手程序员,只是想了解基本的做法。

如果我尝试这样做,我可能会使用toString()方法,我已经尝试过并失败了。

1 个答案:

答案 0 :(得分:0)

使用元组

对于第一种方法,只需删除Console.WriteLine调用,然后在处理输出的应用程序中执行此操作。

对于第二个,你需要返回两个变量,在这种情况下建议返回一个元组。

将randomNumberGen的返回类型更改为Tuple<int,int>两个元组的类型,其中两个成员的类型都是整数,因此您的方法签名应为

public Tuple<int,int> randomNumberGen() 

您应该从两个变量(月和年)创建元组,再次使用一些方法来创建这个元组,最简单的方法是使用start Tuple.Create

因此,您的return语句应如下return Tuple.Create(month,year)

在调用者端删除变量,您可以为第一个调用Item1属性,为第二个调用Item2属性。

你的方法应该是这样的

public Tuple<int,int> RandomNumberGen()
{

    Random rnd = new Random();
    int month = rnd.Next(1, 11); // creates a number between 1 and 12
    int year = rnd.Next(1, 21); // creates a number between 1 and 51

    return Tuple.Create(month,year);

}

并在你的主要

    var result = math.randomNumberGen();
    var month = result.Item1;
    var year = result.Item2;

现在,无论你喜欢什么,都可以使用月份和年份。

设计说明

知道这不是你问题的一部分,但正如通常在C#中命名面向公众的成员的惯例是上骆驼案例,本地人是较低的骆驼案例

属性(在这种情况下没有意义)

您可以在任何具有该属性设置器可见性的上下文中设置属性,即属性,在这种情况下这样做是没有意义的

你班上的

public int Month{ get; private set;} 
public int Year { get; private set; }

public void RandomNumberGen()
{
    Random rnd = new Random();
    Month = rnd.Next(1, 11); // creates a number between 1 and 12
    Year = rnd.Next(1, 21); // creates a number between 1 and 51

}

在你的主要

var custGenVarName = new Arithmetic();
custGenVarName.RandomNumberGen();
int month = custGenVarName.Month;
int year = custGenVarName.Year;

在这种情况下没有意义,因为计算结果不应该存在于要进行计算的对象中,应该进行计算并返回给调用者