接口实现分离(漫谈C#和swift的部分实现拓展功能)

接口实现分离出现不是一两天了,新型“硬语言”都包括了这个语言特性,在CSharp中
实现为 partial ,笔者作为一个c/c++码农看到这个是十分兴奋的,这意味着你可以分别把一个类继承不同接口,并在不同的.cs文件中去实现,而不必写成单个文件的臃肿体具体实现可以为这样

------------------------------------------------------
//文件
Class1.cs
////////////////
namespace ClassLib
{
    public partial class Class1 //如果要分文件实现必须增加关键字限定 partial否则在编译到该类其他部分定义时会爆错
    {
        //构造函数析构函数什么的
        public Class1(){}
        //析构函数不能增加范围限定符 public private internal protect等,它由系统调用,不能用户手动调用,范围由系统判断上下文决定
        ~Class1(){ //CSharp为自动垃圾回收,所有类强制继承object,最终到达object.Finalize()中析构内存对象,用户自定析构为出作用范围后收集资源,因为自动垃圾回收会批量回收,并不一定在出作用范围后立即执行}
        public string GetProperty(){ //实例方法 }
    }
}

接着我们可以让Class1继承一些东西
------------------------------------------------------
//文件
Class1_Extension1.cs
///////////////
using ClassLib.ProtocalLib;
namespace ClassLib
{
    public partial class Class1 : IProtocal1
    {
        void Protocal1_func1(){ //实现代码 }
        void Protocal1_func2(){ //实现代码 }
    }
}
我们分门别类的继承不同的接口,由C#在编译时把这些实现组合在一起,这样我们的代码很干净,分类很清晰
------------------------------------------------------
//文件
Class1_Extension2.cs
///////////////
using ClassLib.ProtocalLib;
namespace ClassLib
{
    public partial class Class1 : IProtocal2
    {
        void Protocal2_func1(){ //实现代码 }
        void Protocal2_func2(){ //实现代码 }
    }
}

------------------------------------------------------
//文件
//接口定义文件
ClassLib_ProtocalLib.cs
//////////////
namespace ClassLib
{
    namespace ProtocalLib
    {
        public interface IProtocal1
        {
            void Protocal1_func1();
            void Protocal1_func2();
        }
        public interface IProtocal2
        {
            void Protocal2_fun1();
            void Protocal2_fun2();
        }
    } 
}

下面介绍笔者最爱的语言swift的实现
由于swift没有命名空间。。。这个有点蛋疼
当然也可用内嵌类模仿,但笔者C出身的习惯就直接前缀了,苹果也不是前缀成吨.. :P

------------------------------------------------------
//文件
Class1.swift
//////////////////
import cocoa
import MyFrameWork

class Class1
{
    //实例实现方法等类相关方法和属性
    init(xx:xx){}
}   

这种方法是oc中就有得extension,不过swift把它做得很简洁,很棒!
------------------------------------------------------
//文件
Class1_Extension1.swift
////////////////////
//import cocoa
//import MyFrameWork //因为swift全局范围的代码就是用于程序的入口,所以你无需编写一个 main() 函数。//当然也不需要import两遍,c/c++是分别编译的,所以要不停include到每个文件,添加引用关系

extension Class1 //默认拓展,没啥定义就往里面添加东西
{
    convenience init(){}
}
extension Class1 : MFProtocal1
{
    func Protocal1_fun1() -> Void { }
    func Protocal1_fun2() -> Void { }
}
------------------------------------------------------
//文件
Class1_Extension2.swift
////////////////////
extension Class1 : MFProtocal2
{
    func Protocal2_fun1() -> Void { }
    func Protocal2_fun2() -> Void { }
}

我们可以利用现代高级语言的特性去整理代码,使用该特性去分类别实现,这样方便了后续的维护和他人的使用

你可能感兴趣的:(C#,swift,语言)