2010-08-08 18 views
7

He estado rompiendo mi cerebro para descubrir cómo hacer esto en C#. Tengo una clase TextGrid, que es esencialmente una grilla de texto MxN. Me gustaría tener una clase Cursor que mantenga una posición (X, Y) en un TextGrid, así como métodos para mover la posición, consultar la posición actual, etc. Idealmente, me gustaría que esta clase no sea Creable fuera de TextGrid, ya que es inútil sin estar conectado lógicamente a un TextGrid.¿Cómo puedo restringir que una clase sea creable solo dentro de otra clase?

Sin embargo, mis enfoques para abordar esto no son a la par: he intentado tener 1) Cursor sea una clase pública anidada dentro de TextGrid con un constructor privado, 2) Cursor sea una clase privada anidada dentro de TextGrid con public constructor, y 3) Cursor sea su propia clase pública separada fuera de TextGrid con un constructor público. # 1 no funciona porque no puedo instanciar un Cursor desde TextGrid debido al constructor privado. # 2 no funciona porque no puedo devolver el objeto Cursor creado fuera de TextGrid (por ejemplo, un método GetCursor()) debido a restricciones de acceso. Y el # 3 no ayuda en absoluto.

Bastante, lo que me gustaría hacer es tener el equivalente del iterador de Java en C#. es posible?

Respuesta

7

Uso # 2, pero enviarlo por la interfaz:

public interface ICursor 
{ 

} 

public class TextGrid 
{ 
    private class Cursor : ICursor 
    { 
    } 

    // This could be a property if it doesn't require much calculation. 
    public ICursor GetCursor() 
    { 
    } 
} 
+0

Esto funcionó muy bien, a pesar de que tenía que hacer alguna clase de recableado, jaja. ¡Gracias! –

1

Durante el uso de una interfaz para resolver el problema es un buen enfoque, si sólo quiere tener todas las instancias de la clase Cursor asociada a una instancia de la clase TextGrid, simplemente puede requerir el creador de pasar un argumento de tipo TextGrid al constructor como tal:

public class Cursor 
{ 
    public Cursor(TextGrid owner) 
    { 
     ... 
    } 
} 
Cuestiones relacionadas