using System;
using UnityEngine;
public interface IParent<T>
{
void Print()
{
GetDefaultAction().Invoke();
}
Action GetDefaultAction();
}
public interface ISonA : IParent<int>
{
Action IParent<int>.GetDefaultAction(){
return () =>Debug.Log("ISonA");
}
// new void Print(){
// Debug.Log("A");
// }
}
public interface ISonB : IParent<float>
{
Action IParent<float>.GetDefaultAction()
{
return () => Debug.Log("ISonB");
}
// new void Print(){
// Debug.Log("B");
// }
}
public abstract class Child :MonoBehaviour, ISonB
{
protected virtual void Start() {
((ISonB)this).Print();
}
}
public class Test : Child,ISonA
{
protected override void Start()
{
base.Start();
((ISonA)this).Print();
}
}
打印结果:
using System;
using UnityEngine;
public interface IParent<T>
{
void Print()
{
GetDefaultAction().Invoke();
}
Action GetDefaultAction();
}
public interface ISonA : IParent<int>
{
Action IParent<int>.GetDefaultAction(){
return () =>Debug.Log("ISonA");
}
// new void Print(){
// Debug.Log("A");
// }
}
public interface ISonB : IParent<float>
{
Action IParent<float>.GetDefaultAction()
{
return () => Debug.Log("ISonB");
}
// new void Print(){
// Debug.Log("B");
// }
}
public abstract class Child :MonoBehaviour
{
protected virtual void Start() {
((ISonB)this).Print();
}
}
public class Test : Child,ISonA, ISonB
{
protected override void Start()
{
base.Start();
((ISonA)this).Print();
}
}
打印结果:
using System;
using UnityEngine;
public interface IParent<T>
{
void Print()
{
GetDefaultAction().Invoke();
}
Action GetDefaultAction();
}
public interface ISonA : IParent<int>
{
Action IParent<int>.GetDefaultAction(){
return () =>Debug.Log("ISonA");
}
// new void Print(){
// Debug.Log("A");
// }
}
public interface ISonB : IParent<float>
{
Action IParent<float>.GetDefaultAction()
{
return () => Debug.Log("ISonB");
}
// new void Print(){
// Debug.Log("B");
// }
}
public abstract class Child :MonoBehaviour
{
protected virtual void Start() {
((ISonB)this).GetDefaultAction().Invoke();
}
}
public class Test : Child,ISonA, ISonB
{
protected override void Start()
{
base.Start();
((ISonA)this).GetDefaultAction().Invoke();
}
}
打印结果:
using System;
using UnityEngine;
public interface IParent<T>
{
void Print()
{
GetDefaultAction().Invoke();
}
Action GetDefaultAction();
}
public interface ISonA : IParent<int>
{
Action IParent<int>.GetDefaultAction(){
return () =>Debug.Log("ISonA");
}
// new void Print(){
// Debug.Log("A");
// }
}
public interface ISonB : IParent<float>
{
Action IParent<float>.GetDefaultAction()
{
return () => Debug.Log("ISonB");
}
// new void Print(){
// Debug.Log("B");
// }
}
public abstract class Child :MonoBehaviour,ISonB
{
protected virtual void Start() {
((ISonB)this).GetDefaultAction().Invoke();
}
}
public class Test : Child,ISonA
{
protected override void Start()
{
base.Start();
((ISonA)this).GetDefaultAction().Invoke();
}
}
打印结果:
using System;
using UnityEngine;
public interface IParent<T>
{
void Print()
{
GetDefaultAction().Invoke();
}
Action GetDefaultAction();
}
public interface ISonA : IParent<int>
{
Action IParent<int>.GetDefaultAction(){
return () =>Debug.Log("ISonA");
}
new void Print(){
Debug.Log("A");
}
}
public interface ISonB : IParent<float>
{
Action IParent<float>.GetDefaultAction()
{
return () => Debug.Log("ISonB");
}
new void Print(){
Debug.Log("B");
}
}
public abstract class Child :MonoBehaviour,ISonB
{
protected virtual void Start() {
((ISonB)this).Print();
}
}
public class Test : Child,ISonA
{
protected override void Start()
{
base.Start();
((ISonA)this).Print();
}
}
打印结果:
说明((ISonA)this)转成了最基础的接口