如何将short-get-set用于私有字段

本文关键字:字段 用于 short-get-set | 更新日期: 2023-09-27 18:26:59

我试着学习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对象中,我没有访问任何字段的权限,也没有执行此操作的"特殊"方法。

我显然不明白,所以请帮我理解。

如何将short-get-set用于私有字段

如果您只想允许从外部类对属性进行读取访问,则需要在属性上以其他方式使用访问器

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

您需要将它们声明为public。如下所示。

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. 您可以将它们用作接口定义或抽象类的一部分

SOUREC-http://msdn.microsoft.com/en-us/library/bb384054.aspx

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