自动实现的属性问题

Auto implemented properties issue

我不知道我做错了什么,我想通过 get 访问器访问私有整数,但我无法让它工作。 Map class 编译正常,但我无法从 MapViewer.

中的其中一个实例访问 get 方法

我也尝试在官方文档中阅读它,代码应该没问题,但它不是

谢谢!

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
    }

默认情况下,这些属性是 private,您需要将它们声明为 public:

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

您的财产是私有的。您需要指定 public 访问权限。

当您没有指定访问修饰符时,它隐藏在 IDE 中,默认值为 "private".

其实你的代码是这样的;

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
    }

请按照下一步link了解 C# 中的默认访问修饰符:
What are the Default Access Modifiers in C#?

C# 中的访问修饰符:
https://msdn.microsoft.com/en-us/library/ms173121.aspx

注意:您可以使用resharper来帮助您。但是不要像修改器工具一样使用 resharper。 "Learn what you should to about an error or warning" 来自 Resharper。 Resharper:https://www.jetbrains.com/resharper/

private 和 public 仅定义属性的可见性。如果您希望它们仅在您的 class 中设置,您绝对可以这样做:

public int xSize { get; private set;}

这将让其他 classes "see" 评估 属性 但禁止他们设置它们。另一方面,您仍然可以从 Map class.

中更改值