如何使用私有字段的短集?

时间:2014-10-19 09:03:16

标签: c# setter getter getter-setter

我试图学习get&的简短版本。在C#中set,但我不知道如何使用它们。

这就是我的尝试:

namespace SomeNamespace {
    class SomeClass {
        private int field1 { get; set;}
        private int field2 { public get; public set; }
    }

    class OtherClass {
        SomeClass sc = new SomeClass();
        int field1 = sc.field1;           //it doesn't work
        int field2 = sc.field2;           //it also doesn't work
        sc.field1 = 1;                    //same here
        sc.field2 = 2;                    //and here
    }
}

在我的SomeClass对象中,我无法访问任何字段,也无法访问#34;特殊"这样做的方法。

我显然没有得到它,所以请帮助我理解。

3 个答案:

答案 0 :(得分:3)

如果您只想允许外部类对您的媒体资源进行读取访问,则需要在属性上反过来使用访问者:

public int field2 { get; private set; }
// setting only allowed from SomeClass, not from OtherClass or inheritors

要允许继承者,您需要将private设置为protected

如果你想允许外部类的读写:

public int field2 { get; set; }
// setting allowed from any class

答案 1 :(得分:1)

您需要将它们声明为公开。喜欢以下。

namespace SomeNamespace {
    class SomeClass {
        public int field1 { get; set;}
        public int field2 { get; set;}
    }

    class OtherClass {
        SomeClass sc = new SomeClass();
        // frist set the values
        sc.field1 = 1;                    
        sc.field2 = 2;                    
        // then read them 
        int field1 = sc.field1;           
        int field2 = sc.field2;           

    }
}
  

在C#3.0及更高版本中,自动实现的属性生成   当不需要额外的逻辑时,属性声明更简洁   在物业访问者。它们还使客户端代码能够创建   对象。声明属性时,如下所示   例如,编译器创建一个私有的匿名支持字段   只能通过属性的get和set访问器访问。

拥有getter / setter(仅与public个变量相比)有优势。

  1. 通过private set;等设置辅助功能。
  2. 您可以在获取值时设置值或格式时添加验证。
  3. 您可以将它们用作接口定义或抽象类的一部分。
  4. SOUREC - http://msdn.microsoft.com/en-us/library/bb384054.aspx

答案 2 :(得分:0)

public class SomeClass
{
    //Will be accessible by instance of this class 
    public int Field1 { get; set; }

    //Accessible within class methods only
    private int Field2 { get; set; }

    public void SomeMethod()
    {
        //You can use private property in any of method within class only
        Console.WriteLine(Field2);
    }

    //Accessible from derived class
    protected int Field3 { get; set; }

}

public class SomeDerived : SomeClass
{
    public void SomeDerivedFunction()
    {
        //Accessing baseclass Property
        Console.WriteLine(Field3);
    }
}

public class SomeThirdPartyClass
{
    private SomeClass sc;

    public SomeThirdPartyClass()
    {
        sc = new SomeClass();

        //Field one as public accessible in other classes by instance
        Console.WriteLine(sc.Field1);
    }
}