我有两个类,我想保留在单独的文件中.
namespace GridSystem
{
public class Grid
{
public void AddItem(GridItem item)
{
item.InformAddedToGrid();
}
}
}
namespace GridSystem
{
public class GridItem
{
public void InformAddedToGrid()
{
Debug.Log("I've been added to the grid");
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何确保不允许其他类调用InformAddedToGrid?
我正在尝试模拟Actionscript命名空间,它可以在方法上使用,代替公共,私有,内部等.它并不完全保护方法,但强制在方法之前包含命名空间的额外步骤被访问.在C#中有替代方法吗?
如果GridItem本身也可以从外部世界隐藏,我会考虑将GridItem作为嵌套类放在Grid中.这样,它就不会在课堂外看到
http://www.codeproject.com/Articles/20628/A-Tutorial-on-Nested-Classes-in-C
并不是说您应该这样做,您应该按照 TGH 的建议进行操作,为 GridItem 有一个公共接口,并将 gridItem 嵌套在 Grid 中(然后在 Grid 上有一个工厂方法来创建 Items 并使用部分 Grid 类将它们放在单独的文件中) 。
因为没有办法拥有友元方法(您可以通过进行友元类InternalsVisibleToAttribute)
你可以这样做(但不要......)
public partial class Grid
{
public void AddItem(GridItem item)
{
item.InformAddedToGrid();
}
}
public class GridItem
{
public void InformAddedToGrid()
{
if (new StackTrace().GetFrame(1).GetMethod().DeclaringType !=
typeof(Grid)) throw new Exception("Tantrum!");
Console.WriteLine("Grid called in...");
}
}
Run Code Online (Sandbox Code Playgroud)
然后
var g = new Grid();
g.AddItem(new GridItem()); // works
new GridItem().InformAddedToGrid(); // throws a tantrum...
Run Code Online (Sandbox Code Playgroud)