Problem z przeniesieniem zmiennej protected do public

0

Cześć,
chciałbym przenieść 4 typy protected, które dziedzicze z pliku Figura.cs do pliku ** Krol.cs** a następnie wyświetlić je w głównym programie Program.cs ,lecz nie mogę z powodu dostępnośći typu protected.

Figura.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Text;
using SzachyRoLa.Klasy;

namespace SzachyRoLa.Klasy
{
    class Figura
    {

        protected string nazwa { get; set; }
        protected string kolor { get; set; }
        protected string symbol { get; set; }
        protected string pozycja { get; set; }

    }
}

** Krol.cs**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SzachyRoLa.Klasy;

namespace SzachyRoLa.Klasy.Figury
{
    class Krol : Figura
    {      
        public Krol()
        {
            nazwa = "Król";
            kolor = "Biały";
            symbol = "♔";
            pozycja = "E1";           
        }
    }
}

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SzachyRoLa.Klasy.Figury;

namespace SzachyRoLa
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("+----------------------------+\n" +
                              "Figura : {0}{1} Kolor : {2} Pozycja : {3}\n" +
                              "+----------------------------+",Klasy.Figury.Krol.symbol, Klasy.Figury.Krol.nazwa, Klasy.Figury.Krol.kolor),Klasy.Figury.Krol.pozycja);            
        }
    }
}
2

Napisz metodę w Krol, która wypisze Ci protected pola;

edit:
w ogóle nie zainicjalizowałeś obiektu;
do czego chcesz się odwoływać jak nie masz nic;

2

Nic nie stoi na przeszkodzie ażeby z klasy Figura zrobić interfejs. Dodatkowo metodę wypisującą wartości pól należałoby wrzucić do tego interfejsu. Dodatkowo wpisywanie nazwy dałbym opcjonalne, bo wiadomo, że obiekt King raczej będzie miał nazwę King, a jak user będzie chciał sobie ją zmienić to zawsze domyślny parametr konstruktora można będzie zwyczajnie nadpisać podczas tworzenia obiektu. No i settera zostawiłem tylko dla pozycji, ponieważ w zasadzie jedynie ona będzie się zmieniać. Pozostałe parametry będą zapisywane tylko raz, a później jedynie odczytywane:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SomekindOfNamespace
{
    interface IChessFigure
    {
        string Name { get; }
        string Color { get; }
        string Icon { get; }
        string Position { get; set; }
        void ShowDetails();
    }

    class King : IChessFigure
    {
        public string Name { get; private set; }
        public string Color { get; private set; }
        public string Icon { get; private set; }
        public string Position { get; set; }

        public King(string color, string icon, string position, string name = nameof(King))
        {
            Name = name;
            Color = color;
            Icon = icon;
            Position = position;
        }

        public void ShowDetails()
        {
            Console.WriteLine(string.Format("Name: {0}\nColor: {1}\nIcon: {2}\nPosition: {3}", Name, Color, Icon, Position));
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            IChessFigure king = new King("White", "♔", "E1");
            king.ShowDetails();
        }
    }
}
0

Bardzo dziękuje za dobre rady. Faktycznie nie zainicjalizowałem obiektu.

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