Класс интерфейса C # Link с универсальным - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть 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 не может использоваться в качестве параметра типа C в универсальном типе Up. Нет никакого косвенного обращения к ссылкам из 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 голосов
/ 19 ноября 2018

Ошибка была бы:

'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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...