解析类变量

本文关键字:类变量 | 更新日期: 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);