如何将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
对象中,我没有访问任何字段的权限,也没有执行此操作的"特殊"方法。
我显然不明白,所以请帮我理解。
如果您只想允许从外部类对属性进行读取访问,则需要在属性上以其他方式使用访问器:
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
变量相比)的优点。
- 通过
private set;
等设置可访问性 - 您可以在设置值时添加验证,也可以在获取值时添加格式
- 您可以将它们用作接口定义或抽象类的一部分
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);
}
}