2016-03-25 2 views
0

Я понятия не имею, что я делаю неправильно, я хочу получить доступ к частным целям через get accessor, но я просто не могу заставить его работать. Класс Map компилируется отлично, но я не могу получить доступ к методу get из одного из его экземпляров в MapViewer.Автоматическая реализация свойств проблемы

Я также попытался прочитать об этом в официальной документации и код должен быть хорошо, но это не

Спасибо!

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 
    } 

ответ

1

частный и публичный определяет только видимость свойств. Если вы хотите, чтобы они были установлены только в своем классе можно определенно сделать так:

public int xSize { get; private set;} 

Это позволит другим классам «увидеть» и оценить свойства, но prohibts их устанавливать их. С другой стороны, вы все еще можете изменить значение из класса Map.

+0

Вот что я искал, спасибо! При использовании частного набора, когда я пытаюсь назначить значение из другого класса, моя IDE не дает никаких предупреждений до компиляции. Weird – Bonfi

+0

Фактически большинство IDE должны подчеркивать попытку установить свойства из другого класса, поскольку это приведет к ошибке компиляции. Intellisense в Visual Studio делает как минимум. – timcbaoth

2

По умолчанию эти свойства private, вам нужно объявить их как public:

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

Я знаю, что они по умолчанию закрыты, поэтому я думаю, что это больше проблема того, как я понял геттеры и сеттеры. Насколько я знаю, я использовал бы геттер и сеттер, чтобы предотвратить изменение атрибута напрямую. В моей ситуации я хочу, чтобы переменные xSize и ySize были только «получены», а не «настроены», поэтому я думал, что оставить их закрытыми только позволит мне редактировать свои значения через get. Если переменные являются открытыми для публики, мне разрешен доступ к ним, даже без получения и установки. Что я получил не так, как получить и установить? Благодаря! – Bonfi

0

Ваши свойства являются частными. Вы должны указать общий доступ.

0

Когда вы не указали модификаторы доступа, они скрыты в среде IDE, а значения по умолчанию - «частные».

На самом деле ваш код такой:

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 
    } 

Изменить;

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 
    } 

Пожалуйста, следуйте следующей ссылке, чтобы узнать о модификаторов доступа по умолчанию в C#:
What are the Default Access Modifiers in C#?

Модификаторы доступа в C#:
https://msdn.microsoft.com/en-us/library/ms173121.aspx

Примечание: Вы можете использовать ReSharper, чтобы помочь вам. Но не используйте resharper, как инструмент модификатора. «Узнайте, что вы должны сообщить об ошибке или предупреждении» из Resharper. Resharper: https://www.jetbrains.com/resharper/

Смежные вопросы