2016-03-25 2 views
0

Je n'ai aucune idée de ce que je fais de mal, je veux accéder aux entiers privés via un accesseur get mais je n'arrive tout simplement pas à le faire fonctionner. La classe Map compile bien, mais je ne peux pas accéder à la méthode get à partir d'une de ses instances dans MapViewer.Problème de propriétés implémentées automatiquement

J'ai essayé aussi de lire à ce sujet dans la documentation officielle et le code devrait être bien, mais il n'est pas

Merci!

public class Map { 

    int xSize {get;} = 0; 
    int ySize {get;} = 0; 

    public Map(int xSize, int ySize){ 
     this.xSize = xSize; 
     this.ySize = ySize; 
    } 

} 


public class MapViewer : MonoBehaviour { 

    int xSize = 20; 
    int ySize = 20; 

    Map map; 
    Texture2D image; 

    void Start() { 
     map = new Map (xSize, ySize); 
     image = new Texture2D(map.???, map.???); //The issue is here 
    } 

Répondre

1

privé et public ne définit que la visibilité des propriétés. Si vous voulez qu'ils soient uniquement définis au sein de votre classe, vous pouvez certainement le faire:

public int xSize { get; private set;} 

Cela vous permettra de d'autres classes « voir » et d'évaluer la propriété, mais les prohibts de les mettre. D'un autre côté, vous pouvez toujours modifier la valeur depuis la classe Map.

+0

C'est ce que je cherchais, merci! Avec un ensemble privé, lorsque j'essaie d'attribuer une valeur à une autre classe, mon IDE ne donne aucun avertissement avant la compilation. Bizarre – Bonfi

+0

En fait, la plupart des IDE devraient souligner une tentative de définir les propriétés d'une autre classe, car cela entraînera une erreur de compilation. Intellisense dans Visual Studio fait au moins. – timcbaoth

2

Par défaut ces propriétés sont private, vous devez les déclarer public:

public int xSize {get;} = 0; 
public int ySize {get;} = 0; 
+0

Je sais qu'ils sont privés par défaut, donc je pense que c'est plus une question de comment j'ai compris les getters et les setters. À ma connaissance, j'utiliserais un getter et un setter pour empêcher que l'attribut soit directement modifié. Dans ma situation, je veux que les variables xSize et ySize soient seulement "getted" et non "setted", donc j'ai pensé que les laisser privées me permettraient seulement de modifier leurs valeurs à travers un get. Si les variables sont signalées au public, je suis autorisé à y accéder même sans get et set. Qu'est-ce que j'ai eu de mal à obtenir et à régler? Merci! – Bonfi

0

Vos propriétés sont privées. Vous devez spécifier l'accès public.

0

Lorsque vous n'avez pas spécifié les modificateurs d'accès, ils sont masqués dans l'EDI et les valeurs par défaut sont "privé".

Donc en fait votre code est comme ceci;

public class Map { 

    private int xSize {get;} = 0; 
    private int ySize {get;} = 0; 

    public Map(int xSize, int ySize){ 
     this.xSize = xSize; 
     this.ySize = ySize; 
    } 

} 


public class MapViewer : MonoBehaviour { 

    private int xSize = 20; 
    private int ySize = 20; 

    private Map map; 
    private Texture2D image; 

    void Start() { 
     map = new Map (xSize, ySize); 
     image = new Texture2D(map.???, map.???); //The issue is here 
    } 

Modifier comme;

public class Map { 

    public int xSize {get;} = 0; 
    public int ySize {get;} = 0; 

    public Map(int xSize, int ySize){ 
     this.xSize = xSize; 
     this.ySize = ySize; 
    } 

} 

public class MapViewer : MonoBehaviour { 

    private int xSize = 20; 
    private int ySize = 20; 

    private Map map; 
    private Texture2D image; 

    void Start() { 
     map = new Map (xSize, ySize); 
     image = new Texture2D(map.???, map.???); //The issue is here 
    } 

S'il vous plaît suivre le lien suivant pour en apprendre davantage sur les modificateurs d'accès par défaut dans C#:
What are the Default Access Modifiers in C#?

Modificateurs d'accès en C#:
https://msdn.microsoft.com/en-us/library/ms173121.aspx

Note: Vous pouvez utiliser ReSharper pour vous aider. Mais n'utilisez pas Resharper comme c'est un outil de modification. "Apprenez ce que vous devriez faire au sujet d'une erreur ou d'un avertissement" de Resharper. Resharper: https://www.jetbrains.com/resharper/