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

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

2015-01-18 15:17
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;"


Przyjmę zlecenia / projekty do wykonania w c#. Zainteresowanych zapraszam do konwersacji na PW.

Pozostało 580 znaków

2015-01-18 15:27
1

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


edytowany 1x, ostatnio: Patryk27, 2015-01-18 15:27

Pozostało 580 znaków

2015-01-18 15:30
0

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

Pozostało 580 znaków

2015-01-18 15:31
0

Przykład:
user image

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


Przyjmę zlecenia / projekty do wykonania w c#. Zainteresowanych zapraszam do konwersacji na PW.
edytowany 1x, ostatnio: wojas666, 2015-01-18 15:32

Pozostało 580 znaków

2015-01-18 15:33
0

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


Pozostało 580 znaków

2015-01-18 15:34
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.

Czyli po prostu źle kombinowałem, myślałem że "Margin" to właściwość. Innymi słowy taki textBox jeśli dobrze rozumiem ma porobione kilka klas i są one wywoływane w jednej klasie? - wojas666 2015-01-18 15:46
No mniej więcej. Piszesz TextBox, klikasz na to i wciskasz F12. - dam1an 2015-01-18 15:51

Pozostało 580 znaków

2015-01-18 15:50
0

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

Pozostało 580 znaków

2015-01-18 22:15
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?


Przyjmę zlecenia / projekty do wykonania w c#. Zainteresowanych zapraszam do konwersacji na PW.

Pozostało 580 znaków

2015-01-18 22:30
anonymous13
1

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

Pozostało 580 znaków

2015-01-18 22:37
0

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


Przyjmę zlecenia / projekty do wykonania w c#. Zainteresowanych zapraszam do konwersacji na PW.

Pozostało 580 znaków

2015-01-18 22:56

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


Pozostało 580 znaków

Liczba odpowiedzi na stronę

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