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