解析类变量
本文关键字:类变量 | 更新日期: 2023-09-27 18:08:25
我是c#语言的新手,因为我几周前才开始使用它,我遇到了一个简单的类问题。我坐了整整30分钟寻找答案,就是想不出如何解决这个问题。这是我到目前为止的代码:
class Program
{
static void Main(string[] args)
{
Plyta p1;
Plyta p2;
p1 = new Plyta(p1.ImtiIlgi(), p1.ImtiAuksti());
p1.ImtiIlgi();
Console.Write("'niveskite plytos ilgi - ");
p1.PlytosIlgis = int.Parse(Console.ReadLine());
p1.ImtiAuksti();
Console.Write("'niveskite plytos auksti - ");
p1.PlytosAukstis = int.Parse(Console.ReadLine());
和类文件:
class Plyta
{
private int ilgis,
aukstis;
public Plyta(int PlytosIlgis, int PlytosAukstis)
{
ilgis = PlytosIlgis;
aukstis = PlytosAukstis;
}
public int ImtiIlgi()
{
return ilgis;
}
public int ImtiAuksti()
{
return aukstis;
}
}
,当我运行它时,它给出以下错误:
praktika。Plyta'不包含'PlytosIlgis'的定义,也没有扩展方法'PlytosIlgis'接受类型为'praktika的第一个参数。可以找到Plyta'(您是否缺少using指令或汇编引用?)
我假设我正在写错误的变量来解析,但无论我想到什么都不起作用,对乞丐有什么帮助吗?:)
我想你对你的方法在做什么感到困惑,当你初始化对象时。我怀疑你实际上想做这样的事情:
class Program
{
static void Main(string[] args)
{
// Ask the user for the relevant data
Console.WriteLine("iveskite plytos ilgi - ");
int ilgis = int.Parse(Console.ReadLine());
Console.WriteLine("iveskite plytos auksti - ");
int aukstis = int.Parse(Console.ReadLine());
// Now we're in a position to create the object
Plyta p1 = new Plyta(ilgis, aukstis);
// And we can read the value back from the property
Console.WriteLine(p1.Ilgis);
}
}
class Plyta
{
// These are public, read-only automatically-implemented properties
public int Ilgis { get; }
public int Aukstis { get; }
public Plyta(int ilgis, int aukstis)
{
// Set the properties...
Ilgis = PlytosIlgis;
Aukstis = PlytosAukstis;
}
}
(这使用了c# 6的只读自动实现属性。如果你不使用c# 5,请告诉我)
在您的类Plyta
中没有名为PlytosIlgis
的公共字段或属性
它只是构造函数的参数名。
你需要声明一对公共属性:
public int PlytosIlgis { get; set; }
public int PlytosAukstis { get; set; }
你的代码应该编译。
虽然有两个内部字段:
private int ilgis,
aukstis;
你可能想把它们转换成属性:
public int Ilgis { get; set; }
public int Aukstis { get; set; }
并将呼叫更改为:
p1.Ilgis = int.Parse(Console.ReadLine());
p1.Aukstis = int.Parse(Console.ReadLine());
你还需要重新工作你的主要功能的其余部分,因为你试图访问p1
的属性之前,它已被初始化。当你试图运行代码时,你会得到一个NullReferenceException。
要么添加一个不带参数的构造函数,要么先将值读入局部变量,然后将其传递给当前构造函数(如Jon Skeet的回答):
Console.WriteLine("iveskite plytos ilgi - ");
int ilgis = int.Parse(Console.ReadLine());
Console.WriteLine("iveskite plytos auksti - ");
int aukstis = int.Parse(Console.ReadLine());
Plyta p1 = new Plyta(ilgis, aukstis);
当前调用:
p1.ImtiIlgi();
p1.ImtiAuksti();
什么也不做,因为你没有给任何东西赋值,
您的问题在这行代码中:
p1 = new Plyta(p1.ImtiIlgi(), p1.ImtiAuksti());
你声明了p1,同时"使用"了它。尝试使用空构造函数
public Plyta(){}
或直接传递参数,如下所示:
int a = 1;
int b = 2;
Plyta p1;
p1 = new Plyta(a, b);