具有泛型的C#Link接口类

时间:2018-11-18 23:58:46

标签: c# unity3d generics interface

我有3个班级,我需要将它们与通用类联系起来。我尝试过这种方式,但这无济于事。因为我无权访问Sp的字段。

Ch

 using System;
 using UnityEngine;

 public abstract class Ch<C, S> : MonoBehaviour
        where C : Ch<C, S>
        where S : Sp<S, C>
 {

     public void Connect()
     {
         S.iii = 10;
     }

 }

Sp

using UnityEngine;

public abstract class Sp<S, C> : Singleton<Sp<S, C>>
    where S : Sp<S, C>
    where C : Ch<C, S>
{

    public static int iii = 0;

}

UPD。如果我将代码转换为以下形式。我收到一个错误“类型Ch不能用作通用类型Up中的类型参数C。从Ch到Ch >>没有隐式引用对话”

using UnityEngine;

public abstract class Sp<C> : Singleton<Sp<C>>
    where C : Ch<Sp<C>>
{

    public static int i = 0;


}


using System;
using UnityEngine;

public abstract class Ch<S> : MonoBehaviour
    where S : Sp<Ch<S>>
{

    public void Connect()
    {
        S.iii = 10;
    }

}

1 个答案:

答案 0 :(得分:2)

错误可能是:

  

'S'是类型参数,在给定的上下文中无效

您不能执行S.iii = 10;,它必须是Sp<S, C>.iii = 10;

它将编译:

public abstract class Ch<C, S>
    where C : Ch<C, S>
    where S : Sp<S, C>
{
    public void Connect()
    {
        Sp<S, C>.iii = 10;
    }
}

public abstract class Sp<S, C> : Singleton<Sp<S, C>>
    where S : Sp<S, C>
    where C : Ch<C, S>
{
    public static int iii = 0;
}