授予对特定的不相关类的访问权



是否有办法修改某些属性对特定类的访问?更具体地说,我想创建一个具有公共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#中似乎是不可能的。只能使用publicprotectedprotected internalinternalprivate访问修饰符。
但是,例如,您可以创建一个只包含这两个类的程序集,并为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;

相关内容

  • 没有找到相关文章

最新更新