Wątek przeniesiony 2015-01-20 02:05 z C# i .NET przez somekind.

Jak można rozszerzyć właściwości?

0

Jak zrobić dodatkowe opcje do właściwości?

Na przykład tworzę właściwość Count i chcę mieć w niej dodatkowe właściwości "Triangle" , "Gifts", "Ornamentation".

Na koniec chcę uzyskać coś takiego:
"jakaś_klasa.Count.Gifts;"

1

Zrób z Count klasę.
Lecz to powinno iść w drugą stronę: Gifts.Count, Triangles.Count (...).

0

Wydaje mi się że coś źle kombinujesz. Co ma Count do Triangle , Gifts lub Ornamentation?

0

Przykład:
user image

Gdzie: "Margin" to właściwość , "Left" to także właściwość.

0

No to zrób klasę.
Ale mówię, że przekombinowywujesz i robisz to na odwrót.

0

Ponieważ Margin jest klasą która posiada te właściwości.
Ale chodzi o to że coś źle to projektujesz. Count nie może być klasą która posiada Ornamentation bo to nie ma sensu.

0

Tak jak napisał @dam1an, Margin jest typu Padding, która oferuje swoje właściwości i metody.

0

Zrobiłem coś takiego:

   class Choinka
    {

        public TrojkatWlasciwosci Drzewo { get; set; }


    }

    class TrojkatWlasciwosci
    {
        private int ile_trojkatow = 3;
        public Graphics miejsce_rysowania;
        private SolidBrush[] kolor = { new SolidBrush(Color.Green), new SolidBrush(Color.GreenYellow), new SolidBrush(Color.DarkSeaGreen), new SolidBrush(Color.LightSeaGreen), new SolidBrush(Color.LawnGreen) };
        List<Point> lista_trojkatow = new List<Point>();

        public int Liczba
        {
            get
            {
                return ile_trojkatow;
            }

            set
            {
                ile_trojkatow = value;
            }
        }
        private Graphics Miejsce_Rysowania
        {
            get
            {
                return miejsce_rysowania;
            }

            set
            {
                miejsce_rysowania = value;
            }
        }

        #region Polozenie
        /*
         * Przeznaczenie:
         * Określa polozenie danego punktu na osi X oraz Y. 
        */
        public Koordynacja Polozenie { get; set; }
        #endregion

        public void RysujDrzewo()
        {
            for (int i = 0; i < ile_trojkatow; i++)
            {
                if (Polozenie.X_Prawy[i] != null)
                {
                    Point punkt_a = new Point(Polozenie.X_Lewy[i], Polozenie.Y_Lewy[i]);
                    Point punkt_b = new Point(Polozenie.X_Prawy[i], Polozenie.Y_Prawy[i]);
                    Point punkt_c = new Point(Polozenie.X_Srodkowy[i], Polozenie.Y_Srodkowy[i]);
                    Point[] tablica_punktow = { punkt_a, punkt_b, punkt_c };
                    lista_trojkatow.Add(tablica_punktow[i]);
                    miejsce_rysowania.FillPolygon(kolor[1], tablica_punktow);
                }
            }
        }
    }


    public class Koordynacja
    {
        private int[] x_prawy = new int[100];
        private int[] y_prawy = new int[100];

        private int[] x_lewy = new int[100];
        private int[] y_lewy = new int[100];

        private int[] x_srodkowy = new int[100];
        private int[] y_srodkowy = new int[100];

        public int[] X_Prawy
        {
            get
            {
                return x_prawy;
            }

            set
            {
                x_prawy = value;
            }
        }
        public int[] Y_Prawy
        {
            get
            {
                return y_prawy;
            }

            set
            {
                y_prawy = value;
            }
        }

        public int[] X_Lewy
        {
            get
            {
                return x_lewy;
            }

            set
            {
                x_lewy = value;
            }
        }
        public int[] Y_Lewy
        {
            get
            {
                return y_lewy;
            }

            set
            {
                y_lewy = value;
            }
        }

        public int[] X_Srodkowy
        {
            get
            {
                return x_srodkowy;
            }

            set
            {
                x_srodkowy = value;
            }
        }
        public int[] Y_Srodkowy
        {
            get
            {
                return y_srodkowy;
            }

            set
            {
                y_srodkowy = value;
            }
        }

        public void UtworzPunkty(int ile_trojkatow)
        {
            try
            {
                int y_wlasciwe_Srodkowe = 100;
                int x_wlasciwe_Lewe = 100;
                int x_wlasciwe_Prawe = 250;
                int x_wlasciwe_Srodkowe = 125;

                int roznica_wysokosci = 50;
                int poprawione = 30;

                for (int i = 0; i < ile_trojkatow; i++)
                {
                    x_srodkowy[i] = x_wlasciwe_Srodkowe;
                    y_srodkowy[i] = y_wlasciwe_Srodkowe;

                    y_wlasciwe_Srodkowe += roznica_wysokosci;

                    x_lewy[i] = x_wlasciwe_Lewe;
                    x_prawy[i] = x_wlasciwe_Prawe;

                    y_wlasciwe_Srodkowe -= poprawione;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.GetBaseException().ToString(), "Błąd!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }

i teraz jak w Kodzie formy chcę się odwołać np:

Choinka choinka = new Choinka();
choinka.Drzewo.Polozenie.UtworzPunkty(3);

Dostaję komunikat:
"Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu."

Dlaczego?

1

Bo w klasie Choinka nigdzie nie tworzysz obiektu, ktory ma byc przypisany do wlasciwosci TrojkatWlasciwosci.

0

Mogę prosić o jakiś prosty przykład?

1

Stwórz instancję klasy TrojkatWlasciwosci w konstruktorze klasy Choinka i przypisz do odpowiedniego pola.

1
class Choinka
    {
 
        public TrojkatWlasciwosci Drzewo { get; set; }
        public Choinka()
        {
            Drzewo = new TrojkatWlasciwosci();
        }
 
    }
0

Problem rozwiązany :)

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