使用C#习惯了代码的布局为:public (interface,class with static memebers),internal (class with implementation).

比如实现一个网络的客户端,那么C#代码布局为:

文件'INetworkClient.cs'包含接口和带有静态方法的类

public interface INetworkClient

{

  string ServerIP {get; set;}

  bool ConnectToServer();

  bool DisconnectFromServer();

}

public class NetworkClient

{

  public static INetworkClient NewInstance(string serverIP)

  {

    return new NetworkClientImp(serverIP);

  }

}

文件'NetworkClient.cs'包含带有实现方法的类

internal class NetworkClientImp : INetworkClient

{

  public NetworkClientImp(string serverIP) {...}

  public string ServerIP {get; set;}

  public bool ConnectToServer() {...}

  public bool DisconnectFromServer() {...}

  //下面的似有方法就不对外可见,包括物理的方式,因为在INetworkClient文件中根本就看不到这些方法的声明

  private void DoSth1() {...}

  private void DoSth2() {...}

}

在OC中怎么实现上面同样的效果呢?

首先,实现INetworkClient.cs文件的相同接口效果- 一个接口和一个带有静态方法的类。

文件NetworkClient.h包含了一个interface定义,其中包含了类属静态方法,这个比C#舒服,一个interface就搞定了,不用分成两个。C#中可以用抽象类做成一个,只是抽象类又必须提供每个方法的实现。

@interface NetworkClient : NSObject

  +(NetworkClient) initWithServerIP: (NSString *) serverIP;

  @property NSString* serverIP;

  -(BOOL) connectToServer;

  -(BOOL) disconnectFromServer;

@end

再实现NetworkClient.cs文件的相同效果:

文件NetworkClient.m

@implement NetworkClient

  //private

  {  

    NSString * serverIP;

  }

  -(BOOL) doSth1 {...}

  -(BOOL) doSth2 {...}

  //public
  @synthesize serverIP;

  -(BOOL) connectToServer {...}

  -(BOOL) disconnectFromServer {...}

@end

实现到这一步,还是和C#的效果有差距,那就是NetworkClient.cs文件中internal关键字标识实现类型NetworkClientImp是只在本模块可见,外部模块是看不到的。只可惜,目前我还没有找到OC中这种对整个实现类型的访问进行控制的方法。

打完收工,虽然不能达到C#的完全的效果,但是还是要尽量做到这种实现隐藏的效果。

Object-C中代码如何分离接口和实现的更多相关文章

  1. C#动态编译代码,执行一个代码片段,或者从指定文件中加载某个接口的实现类

    在项目进行中有时候会需要配置一些复杂的表达式,在程序运行的时候执行表达式,根据结果执行相应的操作,简单写了一个类Expression,利用.net的动态编译技术实现,代码如下: public clas ...

  2. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  3. Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)

    继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...

  4. 在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况

    自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化:自从SharePoint 2010开始有了Client Side Object Model ...

  5. 在vue中使用import()来代替require.ensure()实现代码打包分离

    最近看到一种router的写法 import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) const login = ...

  6. WPF中任意Object的XAML代码格式化输出

    原文:WPF中任意Object的XAML代码格式化输出 有时候,我们需要将WPF中的控件自身的XAML代码输出成文本,那么,我们可以使用System.Windows.Markup.XamlWriter ...

  7. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  8. WPF换肤之四:界面设计和代码设计分离

    原文:WPF换肤之四:界面设计和代码设计分离 说起WPF来,除了总所周知的图形处理核心的变化外,和Winform比起来,还有一个巨大的变革,那就是真正意义上做到了界面设计和代码设计的分离.这样可以让美 ...

  9. Java中如何动态创建接口的实现

    有很多应用场景,用到了接口动态实现,下面举几个典型的应用: 1.mybatis / jpa 等orm框架,可以在接口上加注解进行开发,不需要编写实现类,运行时动态产生实现. 2.dubbo等分布式服务 ...

随机推荐

  1. python之路——面向对象(基础篇)

    面向对象编程:类,对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 "类" 和 "对象" 来实现,所以,面向对象编程其实就是对 "类&quo ...

  2. 用Redis构建分布式锁-RedLock(真分布)

    在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现一个分布式锁管理器,但是这些库实现的方式差别很大,而且很多简单的实现其实只需采用稍微增 ...

  3. 【Android端APP 安装包检查】安装包检查具体内容及实现方法

    一.安装包检查的具体包含内容有哪些? 1.安装包检查的一般内容包括: 安装包基本信息检查: 文件大小: xx MB 包名: com.xx 名称:  xx 本次安装包证书与外网证书对比一致性:是 版本号 ...

  4. codeforces Codeforces Round #380 (Div. 1, Rated, Based on Technocup 2017 - Elimination Round 2)// 二分的题目硬生生想出来ON的算法

    A. Road to Cinema 很明显满足二分性质的题目. 题意:某人在起点处,到终点的距离为s. 汽车租赁公司提供n中车型,每种车型有属性ci(租车费用),vi(油箱容量). 车子有两种前进方式 ...

  5. zabbix微信告警实践

    首先你得有个企业号!!!具体操作步骤可以参考http://itnihao.blog.51cto.com/1741976/1733245,里面写的很详细就不重复了. 微信公众号注册并配置完成后,还需要让 ...

  6. 让padding、border等不占据宽度

    box-sizing:border-box; -moz-box-sizing:border-box; /* Firefox */ -webkit-box-sizing:border-box; /* S ...

  7. C# 委托如何理解 打个比喻

    初学者可能会给winform窗体注册事件,也听过事件是基于委托实现的 那么,委托是什么,事件又是什么,委托和事件是什么关系. 个人喜欢做一些比喻,把这些东西想象成某一个模型,这样方便记忆,理解,随着对 ...

  8. AndroidLinker与SO加壳技术之下篇

    点此查看上篇<AndroidLinker与SO加壳技术之上篇> 2.4 链接 链接过程由 soinfo_link_image 函数完成,主要可以分为四个主要步骤: 1. 定位 dynami ...

  9. 危险的“我以为”DDoS&丑陋的现实

    有些话题可能终其一生你也可以假装不知道就好了,比如全球气候在变暖,不过有些话题确是不得不面对的冰冷现实,在互联网日益发达的当下,比如你不得不面对的DDoS攻击. DDoS代表了分布式拒绝服务,通过许多 ...

  10. 运用requirejs的异步加载方式

    很容易让人以为是权重出问题了,但就我自己多个项目动画导出的经验来看,大 我们说程序员核心能力有以下几点:自学能力,解决问题的能力,团队合作能力.自学可以让我们在这个日新月异的时代不被淘汰;解决问题可以 ...