我该怎么解决封闭的类型错误?

时间:2019-06-11 10:02:46

标签: c#

我试图创建此代码,以便我的Unity中的播放器浏览触发框并设置特定的音频,但是当我输入此代码时,它会提示存在一个封装错误:

  

[10:51:37] Assets / DoorFall.cs(7,24):错误CS0542:“ DoorFall”:成员名称不能与其封闭类型相同

我尝试过更改不同的名称并在周围移动了不同的节点,但是没有任何效果。

public class DoorFall : MonoBehaviour {

    public AudioSource DoorFall;

    // Use this for initializatoin
    void Start() {

        DoorFall = GetComponent<AudioSource>();

    }

    // Update is called once per frame
    void Update() {

    }

    void OnCollisionEnter (Collision collision) {
        if (collision.gameObject.tag == "player")
        {

            DoorFall.play();

            Destroy(collision.gameObject);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您的班级名称new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [0.0, 0.0], zoom: 6 }); 与班级DoorFall的成员相同;取个不同的名字。

有可能您也不需要该成员成为public AudioSource DoorFall

public

答案 1 :(得分:0)

在您的情况下,由于类型名称DoorFall与其中一个成员的名称(公共字段)相同,导致了Compiler error CS0542。您应该重命名成员或类型。

由于名称冲突,因此会产生编译时错误。如果您编写或DoorFall.[memberHere],则在您的类型的方法体内,编译器将不知道是否解析该类型或该成员。这是一个更简洁的示例,说明了为什么它会产生编译时错误。

public class DoorFall {
  private static string ToString() { return "A"; }

  public AudioSource DoorFall = "B";

  void Start() {
    // what value would be assigned here?
    var result = DoorFall.ToString();
  }
}

另一方面,声明公共字段几乎是不可接受的。相反,您应该使用属性来显示字段值或进行设置。如果您希望公开设置/获取值,则可以使用自动获取/设置器。

public AudioSource DoorFall { get; set; }

如果从不从外部访问该类型,则将其声明为private