如何将结构定义为属性?

时间:2009-07-13 05:35:48

标签: c# struct properties

标题可能不正确,如果有,请更改。我不确定如何提出我的问题,所以只需查看代码,因为它应该是显而易见的。

使用注释代码可以工作,但我想知道为什么实际代码不起作用。我确定这是错的,但如何解决呢?或者这不是它的完成方式吗?

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();
        }
    }
}

3 个答案:

答案 0 :(得分:9)

结构只能按值复制,所以最后你要做的就是更改返回的副本。使用课程。

答案 1 :(得分:5)

使用

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

就像Steven所说,你需要创建一个struct的实例,并将属性设置为它。否则它按值传递。

答案 2 :(得分:1)

此外,您可以将结构视为“已分配”,因此您不需要太新()它。而不是

this.Bar = new FooBar();

只做

this.Bar.Baz = 1;