use*_*291 2 .net c# objective-c
Objective C具有协议,它是C#中接口的等价物.然而,C#强制实现Objective C 1.0中的所有方法.
但是在Objective C 2.0中,现在可以将协议中的某些方法标记为可选.C#允许这样做还是将来允许这样做?
理论上,强制执行是接口的目的,但实际上我在复杂项目中遇到了这个硬规则的负担:你必须创建许多很难管理设计或重构的接口.所以对我来说,Objective C 1.0到Objective C 2.0的演变确实很有意义.
由于微软通常务实,如果他们也能做到这一点会很棒.
你可以来的最接近的是一个显式的实现(因此该方法不是公开可见的API的一部分),然后更进一步,以防万一有人找到它并尝试使用它.
void ICanDoSomething.DoSomething()
{
throw new NotSupportedException(); // optional
}
Run Code Online (Sandbox Code Playgroud)
当某人实例化实现该接口的对象时,除非他们将该对象称为接口,否则他们将看不到显式实现.
BCL的一个例子是一个实现的数组ICollection<T>.ICollection<T>有一个Add对固定长度数组无用的方法.对于数组,它是一个显式实现,如果你尝试使用它,它将抛出.
int[] array = { 1, 2, 3 };
ICollection<int> collection = (ICollection<int>)array;
collection.Add(4); // throws NotSupportedException
Run Code Online (Sandbox Code Playgroud)
当然,如果你可以避免一些"可选"行为,那么最好这样做.例如,将其拆分为多个接口,因此类只实现实际需要的行为的接口.
| 归档时间: |
|
| 查看次数: |
2887 次 |
| 最近记录: |