是否有办法修改某些属性对特定类的访问?更具体地说,我想创建一个具有公共get的属性,但只能由某个类设置。
的例子:
public Class1
{
Class2.SomeInt = 5;
}
public static Class2
{
private static int someInt;
public static int SomeInt
{
get { return someInt; }
(give access to Class1 only somehow?) set { someInt = value; }
}
}
更新(更多信息):我在xna中这样做,我希望主类型(Game1)是唯一可以修改静态助手类的东西。这是学校的一个小组项目,我们正在使用SVN(不确定这是否相关),我可以告诉我的小组中的每个人避免设置值,但我想知道是否有更好的方法。
这听起来像c#没有的friend
访问修饰符。我在c#中见过的与此最接近的是将"不相关"的类作为接口,并在类中具有私有实现。像这样:
public interface IWidget
{
void DoSomethingPublic();
}
public class SomeObject
{
private ObjectWidget _myWidget = new ObjectWidget();
public IWidget MyWidget
{
get { return _myWidget; }
}
private class ObjectWidget
{
public void DoSomethingPublic()
{
// implement the interface
}
public void DoSomethingPrivate()
{
// this method can only be called from within SomeObject
}
}
}
SomeObject
外部的代码可以与MyWidget
交互并看到IWidget
接口上的任何内容,但SomeObject
内部的代码也可以看到MyWidget
上的非接口公共成员。
这在c#中似乎是不可能的。只能使用public
、protected
、protected internal
、internal
和private
访问修饰符。
但是,例如,您可以创建一个只包含这两个类的程序集,并为SomeInt
setter设置internal
修饰符,或者将一个类嵌套到另一个类中。
如果你想在智能感知中隐藏setter,你可以在一些接口中定义这个setter并显式地实现它:
public interface IHidden<T>
{
T HiddenPropery { set; }
}
public class SomeClass : IHidden<int>
{
private int someInt;
public int HiddenPropery
{
get { return someInt; }
}
int IHidden<int>.HiddenPropery
{
set { someInt = value; }
}
}
用法:
// This works:
((IHidden<int>)new SomeClass()).HiddenPropery = 1;
// This doesn't:
new SomeClass().HiddenPropery = 1;