C# True作为false返回

C# True作为false返回,c#,unity5,C#,Unity5,我使用的是Unity,并且有一个布尔getter总是返回false。下面的测试类演示了问题所在。如果我使用接口,构造函数总是返回false,但是当我指定我想要的实现时,我会得到正确的结果。我需要使用这个接口,因为我有十几个实现,直到运行时我才知道需要使用哪一个 我整个上午都在逐行检查代码,当它到达第17行时,它会转到正确的实例,该实例的m_已完成为true,但仍然被指定为false。我希望有人能知道问题出在哪里,因为我现在很困惑 编辑:我尝试声明继承的类也使用接口公共类CityConstruct

我使用的是Unity,并且有一个布尔getter总是返回false。下面的测试类演示了问题所在。如果我使用接口,构造函数总是返回false,但是当我指定我想要的实现时,我会得到正确的结果。我需要使用这个接口,因为我有十几个实现,直到运行时我才知道需要使用哪一个

我整个上午都在逐行检查代码,当它到达第17行时,它会转到正确的实例,该实例的m_已完成为true,但仍然被指定为false。我希望有人能知道问题出在哪里,因为我现在很困惑

编辑:我尝试声明继承的类也使用接口公共类CityConstruction:Construction,IConstruction,这解决了问题。我猜我误解了接口是如何工作的,但我不确定这为什么能解决问题

测试等级:

using UnityEngine;
using System.Collections;

public class TestScript : MonoBehaviour 
{
    public IConstruction my_construction1;
    public CityConstruction my_construction2;

    void Start()
    {
        my_construction = gameObject.GetComponent<CityConstruction>();
    }

    // Update is called once per frame
    void Update () 
    {
        bool construction_completed1 = my_construction1.completed; //Always false
        bool construction_completed2 = my_construction2.completed; //Working
    }
}
结构:

using UnityEngine;
using System.Collections;
using System;

public class Construction : Structure, IConstruction
{
    private float m_construction;
    private int m_construction_needed;
    private int m_construction_per_second;
    private bool m_completed;               
    public bool completed { get { return m_completed; } }       

    /* UNITY METHODS */
    void Start () 
    {
        m_completed = false;
    }

    void Update () {
        if(m_construction >= m_construction_needed) {
            m_completed = true;
        } else {
            construct();
        }
    }

    private void construct() {
        m_construction = m_construction_per_second * Time.deltaTime;
    }
}
using UnityEngine;
using System.Collections;

public class CityConstruction : Construction
{
    private float m_construction;
    private int m_construction_needed;
    private float m_construction_per_second;
    private bool m_completed;               

    public bool completed { get { return m_completed; } }

    /* UNITY METHODS */
    void Start () 
    {
        m_construction = 0;
        m_construction_needed = 100;
        m_construction_per_second = 100;
        m_completed = false;
    }

    void Update() {
        if (m_construction >= m_construction_needed) {
            m_completed = true;
        } else {
            construct();
        }
    }

    /* PRIVATE METHODS */
    private void construct() {
        m_construction += m_construction_per_second * Time.deltaTime;
    }
}
城市建设:

using UnityEngine;
using System.Collections;
using System;

public class Construction : Structure, IConstruction
{
    private float m_construction;
    private int m_construction_needed;
    private int m_construction_per_second;
    private bool m_completed;               
    public bool completed { get { return m_completed; } }       

    /* UNITY METHODS */
    void Start () 
    {
        m_completed = false;
    }

    void Update () {
        if(m_construction >= m_construction_needed) {
            m_completed = true;
        } else {
            construct();
        }
    }

    private void construct() {
        m_construction = m_construction_per_second * Time.deltaTime;
    }
}
using UnityEngine;
using System.Collections;

public class CityConstruction : Construction
{
    private float m_construction;
    private int m_construction_needed;
    private float m_construction_per_second;
    private bool m_completed;               

    public bool completed { get { return m_completed; } }

    /* UNITY METHODS */
    void Start () 
    {
        m_construction = 0;
        m_construction_needed = 100;
        m_construction_per_second = 100;
        m_completed = false;
    }

    void Update() {
        if (m_construction >= m_construction_needed) {
            m_completed = true;
        } else {
            construct();
        }
    }

    /* PRIVATE METHODS */
    private void construct() {
        m_construction += m_construction_per_second * Time.deltaTime;
    }
}

在尝试获取以下行中completed的值之前,my_construction1是否已实例化:

bool construction_completed1 = my_construction1.completed; //Always false

如果不是,我会认为get只是返回属性的默认值,因为它是布尔值,所以会是false。

是否在getter本身设置了断点?似乎您实际上有两个构造实例您的构造类不是compilebar,您忘记了指定complete属性的类型请提供可运行的代码来重现问题Public complete{get{return m_complete;}}无效语法complete的类型是什么?。由于您似乎没有在提供的代码中设置值,我只能假设m_complete使用bool的默认值,即