Właściwości automatyczne, zawieranie obiektów w innej klasie

0

Dlaczego to zadziała:

namespace ConsoleApplication1
{
    class Rectangle
    {
        public Rectangle(Point left, Point right)
        {
            TopLeft = left;
            BottomRight = right;
        }
        public Point TopLeft
        {
            get { return topLeft; }
            set { topLeft = value; }
        }
        public Point BottomRight
        {
            get { return bottomRight; }
            set { bottomRight = value; }
        }
        public void DisplayStats()
        {
            Console.WriteLine("[TopLeft: {0}, {1}, {2} BottomRight: {3}, {4}, {5}]", topLeft.X, topLeft.Y, topLeft.Color,
            bottomRight.X, bottomRight.Y, bottomRight.Color);
        }
    }
}

A to już nie ?

namespace ConsoleApplication1
{
    class Rectangle
    {
        public Rectangle(Point left, Point right)
        {
            TopLeft = left;
            BottomRight = right;
        }
        public Point TopLeft
        {
            get;
            set;
         }
        
        public Point BottomRight
          {
            get;
            set;
         }
        public void DisplayStats()
        {
            Console.WriteLine("[TopLeft: {0}, {1}, {2} BottomRight: {3}, {4}, {5}]", topLeft.X, topLeft.Y, topLeft.Color,
            bottomRight.X, bottomRight.Y, bottomRight.Color);
        }
    }
}

Chodzi o to, że program działa, ale nie wyświetla danych rectangle.

0

Pierwsze się nawet nie skompiluje, więc jak niby ma działać?

0

klasę Point mam w oddzielnym pliku, podać ją też?

0

Klasa Point:

 namespace ConsoleApplication1
{
    public enum PointColor
    { LightBlue, BloodRed, Gold }
    class Point
    {
        public int X { get; set; }
        public int Y { get; set; }
        public PointColor Color { get; set; }

        public Point(int xVal, int yVal)
        {
            X = xVal;
            Y = yVal;
            Color = PointColor.Gold;
        }
        public Point(PointColor ptColor)
        {
            Color = ptColor;
        }

        public Point() : this(PointColor.BloodRed) { }

        public void DisplayStats()
        {
            Console.WriteLine("[{0}, {1}]", X, Y);
            Console.WriteLine("Point is {0}", Color);
        }
    }
}

Main:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Point pierwszy = new Point(10,10);
            Point drugi = new Point(100,100);
            Rectangle r = new Rectangle(pierwszy,drugi);
            
            r.DisplayStats();
            Console.ReadLine();
       
        }
    }
} 
0

Chodziło mi o to, że w pierwszym kodzie, w klasie Rectangle nie masz pól topLeft ani bottomRight.

0
namespace ConsoleApplication1
{
    class Rectangle
    {
private Point topLeft
private Point bottomRight
        public Rectangle(Point left, Point right)
        {
            TopLeft = left;
            BottomRight = right;
        }
        public Point TopLeft
        {
            get { return topLeft; }
            set { topLeft = value; }
        }
        public Point BottomRight
        {
            get { return bottomRight; }
            set { bottomRight = value; }
        }
        public void DisplayStats()
        {
            Console.WriteLine("[TopLeft: {0}, {1}, {2} BottomRight: {3}, {4}, {5}]", topLeft.X, topLeft.Y, topLeft.Color,
            bottomRight.X, bottomRight.Y, bottomRight.Color);
        }
    }
}

Dlaczego 2 wersja z 1 posta nie działa?

0

Czemu w wersji 2 w DisplayStatus używasz bottomRight zamiast BottomRight? Już pomijam fakt że nie wiem jakim cudem ci się to kompiluje. Nie masz deklaracji bottomRight.

0

Bo w drugiej wersji korzystam z automatycznych właściwości, dlatego w konstruktorze jest przypisanie do właściwości pól danych. Automatyczne właściwości same generują pola.

0
Świetny Pomidor2 napisał(a):

Bo w drugiej wersji korzystam z automatycznych właściwości, dlatego w konstruktorze jest przypisanie do właściwości pól danych. Automatyczne właściwości same generują pola.

Co nie znaczy, że masz dostęp do tych pól w kodzie. :|

0

Dobra dzięki, nie zauważyłem, że zwracasz uwagę na metodę. Już działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1