Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 属性隐藏继承的成员_C#_List_Unity3d - Fatal编程技术网

C# 属性隐藏继承的成员

C# 属性隐藏继承的成员,c#,list,unity3d,C#,List,Unity3d,我有以下课程: public abstract class Tween : MonoBehaviour { protected List<TweenItem> items = new List<TweenItem>(); } public class TweenItem { // Properties } public class ValueTweenItem : TweenItem { // Properties } 当我这样做时,我得到以下

我有以下课程:

public abstract class Tween : MonoBehaviour {
    protected List<TweenItem> items = new List<TweenItem>();
}
public class TweenItem {
    // Properties
}

public class ValueTweenItem : TweenItem {
    // Properties
}
当我这样做时,我得到以下警告:

Assets/simple/Scripts/Util/Tween/ColorTween.cs(9,40):警告CS0108:
simple.Tween.ColorTween.items'隐藏继承的成员
simple.Tween.Tween.items'。如果要隐藏,请使用新关键字

我曾尝试添加
覆盖
虚拟
关键字,但没有效果

我怎样才能让这个警告消失

编辑 以下是基础:

using UnityEngine;
using System.Collections.Generic;

namespace Simple.Tween{
    public abstract class AbstractTween<T> : MonoBehaviour {
        [SerializeField]
        protected List<T> items = new List<T>();
    }

    public abstract class Tween : AbstractTween<TweenItem>{

        // Common functions here

    }

    public class TweenItem {
        public Component component;
        public float duration = 2f;
        public bool playOnStart = false;

        [HideInInspector]
        public float time = 0f;
        [HideInInspector]
        public bool complete = false;
        [HideInInspector]
        public bool runTween = false;
    }

    public class ValueTweenItem : AbstractTween<ValueTweenItem> {
        public string propertyName;
        public float startValue = 0f;
        public float endValue = 1f;
    }

    public class ColorTweenItem : AbstractTween<ColorTweenItem> {
        public Gradient gradient;
    }
}
使用UnityEngine;
使用System.Collections.Generic;
名称空间Simple.Tween{
公共抽象类AbstractTween:单行为{
[序列化字段]
受保护的列表项=新列表();
}
公共抽象类Tween:AbstractTween{
//这里的常见功能
}
公共类TweenItem{
公共部分;
公共浮动持续时间=2f;
public bool playOnStart=false;
[hideininstecpt]
公共浮动时间=0f;
[hideininstecpt]
公共bool complete=false;
[hideininstecpt]
公共bool-runTween=假;
}
公共类ValueTween项:AbstractTween{
公共字符串propertyName;
公共浮动起始值=0f;
公共浮动端值=1f;
}
公共类ColorTween项:AbstractTween{
公共梯度;
}
}
下面是我正在使用的类:

using UnityEngine;
using System.Collections.Generic;

namespace Simple.Tween{
    [AddComponentMenu("Simple/Tween/Value Tween")]
    public class ValueTween : Tween{

        [SerializeField]
        protected List<ValueTweenItem> items = new List<ValueTweenItem>();

        void Update(){
            // Set the color of the object
            foreach(ValueTweenItem item in items){
                if(item.complete || item.runTween == false){
                    continue;
                }
            }
        }

        void TweenValue(Component item, string field, float value){
            item.GetType().GetProperty(field).SetValue(item, value, null);
        }

    }
}
使用UnityEngine;
使用System.Collections.Generic;
名称空间Simple.Tween{
[AddComponentMenu(“Simple/Tween/Value Tween”)]
公共类价值Tween:Tween{
[序列化字段]
受保护的列表项=新列表();
无效更新(){
//设置对象的颜色
foreach(项目中项目间的值){
if(item.complete | | item.runTween==false){
继续;
}
}
}
void TweenValue(组件项、字符串字段、浮点值){
item.GetType().GetProperty(field).SetValue(item,value,null);
}
}
}

您只需按照编译器的建议使用new关键字即可

protected new List<ValueTweenItem>  items = new List<ValueTweenItem>();
受保护的新列表项=新列表();

或者直接使用bass类变量(已经实例化)

您只需按照编译器的建议使用new关键字即可

protected new List<ValueTweenItem>  items = new List<ValueTweenItem>();
受保护的新列表项=新列表();

或者直接使用bass类变量(已经实例化)

遵循实体打开/关闭原则:

您的抽象类在其定义中定义了一个具体类,这正是创建泛型要解决的问题:

首先,定义您的抽象:

public abstract class AbstractTween<T> : MonoBehaviour 
{
   protected List<T> items = new List<T>();
   ...
}
现在更改抽象类声明如下:

public abstract class AbstractTween<T> : MonoBehaviour where T : ITweenItem
{  ... }
ColorTweenItem
ValueTweenItem
似乎扩展了
TweenItem

如果您想将其添加到摘要中,则只能使用
TweenItems

public abstract class AbstractTween<T> : MonoBehaviour where T : TweenItem
公共抽象类AbstractTween:MonoBehavior,其中T:TweenItem

遵循坚实的打开/关闭原则:

您的抽象类在其定义中定义了一个具体类,这正是创建泛型要解决的问题:

首先,定义您的抽象:

public abstract class AbstractTween<T> : MonoBehaviour 
{
   protected List<T> items = new List<T>();
   ...
}
现在更改抽象类声明如下:

public abstract class AbstractTween<T> : MonoBehaviour where T : ITweenItem
{  ... }
ColorTweenItem
ValueTweenItem
似乎扩展了
TweenItem

如果您想将其添加到摘要中,则只能使用
TweenItems

public abstract class AbstractTween<T> : MonoBehaviour where T : TweenItem
公共抽象类AbstractTween:MonoBehavior,其中T:TweenItem


那么,您希望发生什么?默认情况下,
ValueTween
上会有一个
items
,因为它继承自
Tween
,您不需要声明它。如果您真的想隐藏它,请使用
new
关键字。item now是字段您必须将其更改为property public/protected Virtual查看您的编辑。。。您的问题是什么?如何编译
公共类值TweenItem:AbstractTween
呢?您的TweenItem类不会扩展抽象Tween。。。这些项看起来只是数据类。那么,您希望发生什么?默认情况下,
ValueTween
上会有一个
items
,因为它继承自
Tween
,您不需要声明它。如果您真的想隐藏它,请使用
new
关键字。item now是字段您必须将其更改为property public/protected Virtual查看您的编辑。。。您的问题是什么?如何编译
公共类值TweenItem:AbstractTween
呢?您的TweenItem类不会扩展抽象Tween。。。这些项看起来就像是数据类。仅仅因为它删除了警告,并不意味着这就是你想要做的。@Jonesopolis这是真的。OP指的是警告。但这当然不一定是应该做的。@Moe,当然不是轻描淡写你的答案,只是努力做一个好公民。如果在一个有一些内容的班级里做,这将不可避免地导致某种形式的崩溃。。记住坚实,开放的改变,但封闭的修改。。。这意味着在许多情况下,子类化。。就像这样。仅仅因为它删除了警告,并不意味着这就是你想要做的。@Jonesopolis这是真的。OP指的是警告。但这当然不一定是应该做的。@Moe,当然不是轻描淡写你的答案,只是努力做一个好公民。如果在一个有一些内容的班级里做,这将不可避免地导致某种形式的崩溃。。记住坚实,开放的改变,但封闭的修改。。。这意味着在许多情况下,子类化。。像这样,好吧。。。在
ValueTween
类中,我有这个
foreach(items中的ValueTweenItem项){item.complete}
它不再能看到属性
complete
。那是什么?其实我上面的评论是错的,你应该