我试图学习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;特殊"这样做的方法。
我显然没有得到它,所以请帮助我理解。
答案 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
个变量相比)有优势。
private set;
等设置辅助功能。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);
}
}