Я пытаюсь понять модификаторы доступа, но немного не понимаю, как использовать internal
.
У меня есть класс в пространстве имен, который выглядит так:
namespace Grids
{
public abstract class Grid
{
internal abstract Vector2Int ToGrid(float worldX, float worldY);
internal Vector2Int ToGrid(Vector3 worldPoint) => ToGrid(worldPoint.x, worldPoint.z);
internal Vector2Int ToGrid(Vector2 worldPoint) => ToGrid(worldPoint.x, worldPoint.y);
}
}
Затем это реализуется в унаследованном классе следующим образом:
namespace Grids
{
public class RectGrid : Grid
{
public int Width;
public int Height;
public Grid(int w, int h)
{
Width = w;
Height = h;
}
internal override Vector2Int ToGrid(float worldX, float worldY)
{
int col = Mathf.FloorToInt(worldX / Width);
int row = Mathf.FloorToInt(worldY / Height);
return new Vector2Int(col, row);
}
}
}
Итак, теперь я создаю класс для использования этой сетки, которая не является частью пространства имен:
using Grids;
using UnityEngine;
public class MapGenerator : MonoBehaviour
{
private RectGrid _rectGrid;
void Awake() {
_rectGrid = new RectGrid(1,1);
_rectGrid.ToGrid(Vector3.zero); // why do i have access to this function
}
}
Но по какой-то причине у меня есть доступ к функциям, которые должны быть внутренними:
Почему это ? Я не хочу раскрывать эту функцию, я хочу, чтобы она была доступна только моему классу Map
, который имеет то же пространство имен Grids
и будет контролировать то, что я делаю. Тем не менее, мой класс MapGenerator
имеет доступ, даже не будучи частью пространства имен?
Я неправильно понял, как здесь работает внутреннее?