有没有办法修改某个属性对特定类的访问?更具体地说,我想创建一个具有公共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(不确定它是如何相关的),我可以告诉我小组中的每个人都避免设置值,但我想知道是否有更好的方法。 / p>
答案 0 :(得分:1)
在C#中似乎是不可能的。您只能使用public
,protected
,protected internal
,internal
和private
访问修饰符。
但是,例如,您可以创建一个仅包含这两个类的程序集,并为internal
setter设置SomeInt
修饰符或将一个类嵌套到另一个类中。
如果您只想隐藏IntelliSense中的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;
答案 1 :(得分:1)
这听起来像是friend
访问修饰符,C#没有。我在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
上与非公共成员接口{1}}。