C#接口一些有意思的东西

复制代码
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)转成了最基础的接口

相关推荐
作孽就得先起床4 分钟前
unity webGL导出.glb模型
unity·c#·游戏引擎·webgl
Java程序员威哥15 分钟前
Java应用容器化最佳实践:Docker镜像构建+K8s滚动更新(生产级完整模板+避坑指南)
java·开发语言·后端·python·docker·kubernetes·c#
垂葛酒肝汤22 分钟前
C#的const和static的问题
开发语言·c#
xb11321 小时前
WinForms 多窗体应用程序详解
数据库·microsoft·c#
xb11321 小时前
C# WinForms界面设计
开发语言·c#
阿蒙Amon3 小时前
C#每日面试题-简述类成员
开发语言·c#
阿蒙Amon3 小时前
C#每日面试题-ValueTuple和Tuple的区别
开发语言·c#
_守一3 小时前
UE5.2 C++插件中调用C#第三方库
c++·ue5·c#
闻缺陷则喜何志丹4 小时前
【C# WPF】TextBox的数据绑定
ui·c#·wpf·mvvm·数据绑定·textbox
我是苏苏16 小时前
C#高级:使用ConcurrentQueue做一个简易进程内通信的消息队列
java·windows·c#