Hvordan er en struct definert som en eiendom?

stemmer
1

Tittelen kan være feil, i så fall må du endre. Jeg er ikke sikker på hvordan å stille spørsmålet mitt så bare se på koden som det burde være innlysende.

Bruke kommen koden vil fungere, men jeg ønsker å vite hvorfor den faktiske koden ikke fungerer. Jeg er sikker på at det er galt, men hvordan kan det fikses? Eller er dette ikke hvordan det gjøres?

using System;

namespace SomethingAwful.TestCases.Structs
{
    public class Program
    {
        public static void Main()
        {
            Foo f = new Foo();
            f.Bar.Baz = 1;

            Console.WriteLine(f.Bar.Baz);
        }
    }

    public class Foo
    {
        public struct FooBar
        {
            private int baz;

            public int Baz
            {
                get
                {
                    return baz;
                }
                set
                {
                    baz = value;
                }
            }

            public FooBar(int baz)
            {
                this.baz = baz;
            }
        }

        private FooBar bar;

        public FooBar Bar
        {
            get
            {
                return bar;
            }
            set
            {
                bar = value;
            }
        }

        //public FooBar Bar;

        public Foo()
        {
            this.bar = new FooBar();
            //this.Bar = new FooBar();
        }
    }
}
Publisert på 13/07/2009 klokken 05:35
kilden bruker
På andre språk...                            


3 svar

stemmer
9

En struct kopieres bare av verdi, så alt du ender opp med å gjøre er å endre kopien som ble returnert. Bruk en klasse.

Svarte 13/07/2009 kl. 05:38
kilden bruker

stemmer
5

Bruk

Foo.FooBar myFooBar = new Foo.FooBar { Baz = 1 };
f.Bar = myFooBar;

Som Steven sagt, må du opprette en forekomst av en struct, og sette egenskapen til det. Ellers er det vedtatt av verdi.

Svarte 13/07/2009 kl. 05:48
kilden bruker

stemmer
1

Du kan også tenke på struct som "allerede bevilget", så du trenger ikke for nye () det. I stedet for

this.Bar = new FooBar();

Bare gjør

this.Bar.Baz = 1;
Svarte 13/07/2009 kl. 07:43
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more