解析类变量?

时间:2016-09-23 13:34:10

标签: c#

我对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指令或汇编引用? )

我假设我正在编写错误的变量来解析,但是无论我想到什么都不起作用,对于一个初学者有什么帮助? :)

3 个答案:

答案 0 :(得分:7)

我认为您对您的方法正在做什么以及何时初始化对象感到困惑。我怀疑你真的想做这样的事情:

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,请告诉我。)

答案 1 :(得分:4)

您的班级PlytosIlgis中没有名为Plyta的公开字段或媒体资源。

它只是构造函数的参数名称。

您需要声明一对公共属性:

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();

什么都不做,因为你没有把价值分配给任何东西,

答案 2 :(得分:1)

您的问题出在以下代码行中:

+

你正在声明p1并且同时#34;使用"它。尝试使用空构造函数

to_s

或直接传递参数,如下:

+ @adresse.to_s # would do it for you

否则使用getter和setter。