好的,我有几个问题。我先解释一下我要做什么。我首先创建了这个代码,但没有构造函数,并且这两个方法在声明中都有静态。现在我想添加一个我提供的构造函数,我必须在main方法中创建它的实例,然后为它提供一些随机值。我还需要通过Main方法中的实例调用这两个方法。最后,在编译之后,应该说“Hello World!”和“81”所以这里有问题:
代码:
namespace CalculatorA
{
class Calculator
{
public string WriteText(string parametar1)
{
return parametar1;
}
public int WriteNumber(int parametar2)
{
return parametar2;
}
public Calculator(int operand1, int operand2)
{
this.operand1 = operand1;
this.operand2 = operand2;
}
}
class Program
{
static void Main(string[] args)
{
string s = Calculator.WriteText("Hello World!");
Console.WriteLine(s);
string n = Calculator.WriteNumber(53 + 28).ToString();
Console.WriteLine(n);
Console.ReadLine();
}
}
}
答案 0 :(得分:2)
我认为你缺少一些面向对象的编程概念。构造函数几乎是一个初始化类实例的方法。
构造函数中的变量应该是相同的名称 作为方法中的那些?
必须命名构造函数参数。但是构造函数参数和方法参数之间没有联系。这些只是一个类的独立成员。
如何在main方法中创建构造函数的实例?
您创建了一个类的实例,但不是构造函数。虽然使用new
关键字启动对象时会调用构造。
如何给它一些随机值?
视类型而定。例如,对于整数,您可以使用new Random().Next()
。
如何通过实例调用这两种方法?
我想...只是打电话......就像那样:
calc.Method1();
calc.Method2();
答案 1 :(得分:0)
var calculator = new Calculator(53,28);
Random
类calculator.WriteNumber(53+28);
答案 2 :(得分:0)
构造函数中的变量是否应该与方法中的变量相同?
您在构造函数中使用的变量未在类中声明。
你的班级应该是这样的:
class Calculator
{
private int operand1 {get; set;} //need to declare the var before using
private int operand2 {get; set;}
private string Message {get; set;}
public string WriteText() //you don't need to send parameters to the function if you have already got them in the contructor
{
return Message;
}
public int GetSum()
{
return operand1 + operand2;
}
public Calculator(string Message, int operand1, int operand2)
{
this.Message = Message;
this.operand1 = operand1;
this.operand2 = operand2;
}
}
class Program
{
static void Main(string[] args)
{
Calculator CalcObj = new Calculator ("Hello word!", 53, 28); //That is how you can initialize a class object
string s = Calculator.WriteText(); //this will return you the string you passed in controller
Console.WriteLine(s);
string n = Calculator.GetSum().ToString(); //that will give you sum of two operand
Console.WriteLine(n);
Console.ReadLine();
}
}
您可以使用随机数 C#中的Random()方法在main方法中生成随机数并将它们传递给类的构造函数,GetSum将为您提供一些这些数字
答案 3 :(得分:0)
问题1: 是和否 - 是的,因为它们可以被命名为相同或相同,并且由于其范围而仍然起作用。不,因为在您的示例代码中,您希望它们代表他们将要持有的值,以便您可以一目了然地了解其目的。为简单起见,在我显示的示例中,我将在示例中将它们保留为命名。
我建议谷歌搜索变量和命名约定的范围和生命周期。
此外,将字段或属性应用于Calculator
类是明智的,因此构造函数值将被存储以供类中的方法使用。这应该是你对参数的意图吗?
问题2:
创建Calculator
class
var calc = new Calculator(); //calc can be named to anything you want.
问题3:
使用System.Random
的实例然后生成各种随机数。
var rnd = new Random();
var randomNumber1 = rnd.Next(0, 100);
var randomNumber2 = rnd.Next(0, 100);
//then using those in your Calculator.WriteNumber()
var calc = new Calculator(1,2); //without fields/properties this could be erroneous
var result = calc.WriteNumber(randomNumber1 + randomNumber2); //returns the sum of those to params.
问题4:
您需要初始化Calculator
class
的实例 - 请参阅问题2.然后使用该变量访问方法,例如:
var result = calc.WriteNumber(2); //returns 2
//or
var result = calc.WriteNumber(53 + 28); //returns 81
以下是一些可以从示例中学习的工作代码。希望这会有所帮助。
static void Main(string[] args)
{
//Create random numbers
var rnd = new Random();
var randomNumber1 = rnd.Next(1, 100); //get a random int between 1 and 99
var randomNumber2 = rnd.Next(1, 100); //and again
//Create instance of Calculator Class
var calc = new Calculator(randomNumber1, randomNumber2);
//Intro
string s = calc.WriteText("Hello World!");
Console.WriteLine(s);
//Do your addition method
var n = calc.WriteNumber(53 + 28);
Console.WriteLine(n);
//Do new addition method
var result = calc.Add(); //Returns _operand1 + _operand2
Console.WriteLine(result);
//exit application
Console.ReadLine();
}
class Calculator
{
// Set fields for your constructor to use.
// Another valid option is using properties, google this as its beyond the scope of a basic tutorial
private int _operand1, _operand2;
public string WriteText(string parametar1)
{
return parametar1;
}
public int WriteNumber(int parametar2)
{
return parametar2;
}
public int Add()
{
return _operand1 + _operand2;
}
public Calculator(int operand1, int operand2)
{
//You don't need the this keyword
_operand1 = operand1;
_operand2 = operand2;
}
}