簡體   English   中英

在C#中訪問對象的'名稱'屬性

[英]Accessing the 'Name' property of an object in C#

我正在學習C#(是我的新手),並且正在構建一個小型Airport應用程序。 我希望能夠獲取機場中飛機的名稱,而不是僅僅知道列表包含各種Airport.Plane對象。 目前,我的代碼是:

Airport.cs:

using System;
using System.Collections.Generic;

namespace Airport
{
    public class Airport
    {
        public List<object> planes;

        public Airport()
        {
            planes = new List<object>();
        }

        public List<object> Land(object plane)
        {
            planes.Add(plane);
            Console.WriteLine("Currently in the airport:");
            planes.ForEach(Console.WriteLine);
            return planes;
        }

        public List<object> TakeOff(object plane)
        {
            planes.Remove(plane);
            Console.WriteLine("Currently in the airport:");
            planes.ForEach(Console.WriteLine);
            return planes;
        }

        public int GetPlaneCount()
        {
            Console.WriteLine(planes.Count);
            return planes.Count;
        }
    }
}

Plane.cs:

using System;
namespace Airport
{
    public class Plane
    {
        public string Name { get; set; }

        public Plane(string name)
        {
            Name = name;
        }
    }
}



Program.cs中:

using System;

namespace Airport
{
    class Program
    {
        static void Main(string[] args)
        {
            Airport airport = new Airport();
            Plane plane = new Plane("Private Jet");
            airport.Land(plane);
            airport.TakeOff(plane);
            airport.GetPlaneCount();
        }
    }
}


我試圖通過Console.Log(plane.Name);訪問機場中飛機的名稱Console.Log(plane.Name); 但出現以下錯誤:“'對象'不包含名稱的定義”。 任何幫助將非常感激!

謝謝

一些偽代碼可以幫助您理解

public class Airport
{
    public string AirportName { get; set;}

    public List<Plane> planes;

    public Airport(string airportName)
    {
        AirportName = airportName;
        planes = new List<Plane>();
    }

    public List<Plane> Land(Plane plane)
    {
        planes.Add(plane);
        return planes;
    }

    public List<Plane> TakeOff(Plane plane)
    {
        planes.Remove(plane);
        return planes;
    }

    public int GetPlaneCount()
    {
        Console.WriteLine(planes.Count);
        return planes.Count;
    }
}

public void Main()
{
    var capeTownAirport = new Airport("Cape Town")

    var planeA = new Plane("facy plane");
    var planeB = new Plane("Another facy plane");

    var currentPlans = capeTownAirport.Land(planeA);            

    var currentPlans2 = capeTownAirport.Land(planeA);

    foreach(var plane in currentPlans2)
    {
         Console.WriteLine(plane.Name);
    }
}

基本上, C#在大多數情況下是一種靜態類型的編程語言 ,因此,如果將某些內容聲明為對象,則只會看到對象的屬性,字段和方法。 您可以通過將對象投射到“平面”來輕松解決此問題,但是堅持使用已知類型始終是最好的方法。

var plane = new Plane("My plane");

object myObject = plane;
// Console.WriteLine(myObject.Name); // Compiler complains here - object doesn't have Name property or field defined

Console.WriteLine((Plane)myObject); // Compiler is happy here, but you should never do it like that!

正如您對問題的評論中所說的那樣,請使用強類型列表(使用List <Plane>而不是List <object>),它將可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM