为什么在Jon Skeet的书中的示例中使用了内部关键字?

用户名

我一直在尝试了解internal关键字以及何时需要使用它。幸运的是,今天,当我在乔恩·斯基特(Jon Skeet)的书《C#In Depth,第三版》中介绍如何实现迭代器时,在第161-162页上有一个用法internal

清单6.32

using System;
using System.Collections;

public class IterationSample : IEnumerable
{
    object[] values;
    int startingPoint;

    public IterationSample(object[] values, int startingPoint)
    {
        this.values = values;
        this.startingPoint = startingPoint;
    }

    public IEnumerator GetEnumerator()
    {
        throw NotImplementedException();
    }
}

清单6.3

class IterationSampleIterator : IEnumerator
{
    IterationSample parent;
    int position;

    internal IterationSampleIterator(IterationSample parent)
    {
        this.parent = parent;
        position = -1;
    }

    public bool MoveNxt()
    {
        if (position != parent.values.Length)
        {
            position++'
        }
        return position < parent.values.Length;
    }

    public object Current
    {
        get 
        {
            if (position == -1 ||
                position == parent.values.Length)
            {
                throw new InvalidOperationException();
            }
            int index = position + parent.startingPoint;
            index = index % parent.values.Length;
            return parent.values[index];
        }
    }

    public void Reset()
    {
        position = -1;
    }
}

那为什么internal IterationSampleIterator呢?据我了解,internal通常是代替public因此,请帮助我了解为什么public IterationSampleIterator会引起问题,而替换public可以解决问题internal

柬埔寨Mrinal

在深入探讨发布的代码之前,您可以查看.Net C#中有关访问修饰符MSDN链接

想法仍然是,当我们希望仅在内部访问某些内容时,我们会将其内部化assembly (mostly dll)它似乎与相似public,但是用法却有很大不同,因为public它可以从任何地方对所有调用者进行开放访问。

在代码示例中,internal的用法具有不同的观点,这更多是IterationSampleIterator通过构造构造函数来控制的对象internal,因此只能从自己的程序集中的调用者实例化此类,而从外部的任何其他调用者均可实例化此类。无法做到。

对于程序集之外的所有用户,他们只能调用诸如like之类的方法Current或诸如like之类的方法,MoveNext并且Reset要与内部实现一起使用,不能直接访问该对象。

通常,在组装中有某些类在内部使用并因此公开包装功能的情况下就是这种情况。我认为System.IO是公开此类的程序集之一,可以在程序集边界内使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

void函数上的“ void”关键字是可选的吗?还是乔恩·斯凯特(Jon Skeet)的书中有type-o?

来自分类Dev

为什么要在Java中使用`transient`关键字?

来自分类Dev

为什么在活动模式中使用关键字“内联”?

来自分类Dev

为什么在Vue Project中使用“ get”关键字?

来自分类Dev

为什么在构造函数中使用此关键字

来自分类Dev

为什么在angular js中使用abstract关键字?

来自分类Dev

如果枚举是隐式静态的,为什么它们可以在内部使用“ this”关键字?

来自分类Dev

在 TypeScript 中使用“is”关键字有什么好处?

来自分类Dev

为什么在Swift变量声明中使用关键字“ get”?

来自分类Dev

为什么在C的标头中使用extern关键字?

来自分类Dev

为什么需要在Objective-C中使用@property关键字?

来自分类Dev

为什么有人在循环宏中的子句中使用关键字?

来自分类Dev

为什么我们不能在接口方法声明中使用synced关键字

来自分类Dev

为什么在tabs.js中使用new关键字

来自分类Dev

为什么要在Elixir中使用do / else关键字呢?

来自分类Dev

为什么我们仍然在Groovy / Grails中使用package关键字?

来自分类Dev

为什么在Perl modulino中断测试中使用'package'关键字?

来自分类Dev

为什么在Swift变量声明中使用关键字“ get”?

来自分类Dev

为什么在 UPDATE SET 中使用 AND 关键字时 MySQL 不会抛出错误

来自分类Dev

为什么我不能在 rxjs .let() 操作中使用“this”关键字?

来自分类Dev

为什么在带有 dict 的 if 语句中使用关键字“and”会出现逻辑错误?

来自分类Dev

为什么大多数在线代码示例在遵循协议功能时都使用override关键字?

来自分类Dev

为什么不必使用关键字static?

来自分类Dev

为什么在调用函数时使用`go`关键字?

来自分类Dev

为什么ReSharper建议使用“ as”关键字而不是“ is”?

来自分类Dev

为什么Java / Scala使用扩展/实现关键字?

来自分类Dev

为什么IViewLocalizer无法使用关键字{0}?

来自分类Dev

为什么ReSharper建议使用“ as”关键字而不是“ is”?

来自分类Dev

为什么在这里使用克隆关键字

Related 相关文章

  1. 1

    void函数上的“ void”关键字是可选的吗?还是乔恩·斯凯特(Jon Skeet)的书中有type-o?

  2. 2

    为什么要在Java中使用`transient`关键字?

  3. 3

    为什么在活动模式中使用关键字“内联”?

  4. 4

    为什么在Vue Project中使用“ get”关键字?

  5. 5

    为什么在构造函数中使用此关键字

  6. 6

    为什么在angular js中使用abstract关键字?

  7. 7

    如果枚举是隐式静态的,为什么它们可以在内部使用“ this”关键字?

  8. 8

    在 TypeScript 中使用“is”关键字有什么好处?

  9. 9

    为什么在Swift变量声明中使用关键字“ get”?

  10. 10

    为什么在C的标头中使用extern关键字?

  11. 11

    为什么需要在Objective-C中使用@property关键字?

  12. 12

    为什么有人在循环宏中的子句中使用关键字?

  13. 13

    为什么我们不能在接口方法声明中使用synced关键字

  14. 14

    为什么在tabs.js中使用new关键字

  15. 15

    为什么要在Elixir中使用do / else关键字呢?

  16. 16

    为什么我们仍然在Groovy / Grails中使用package关键字?

  17. 17

    为什么在Perl modulino中断测试中使用'package'关键字?

  18. 18

    为什么在Swift变量声明中使用关键字“ get”?

  19. 19

    为什么在 UPDATE SET 中使用 AND 关键字时 MySQL 不会抛出错误

  20. 20

    为什么我不能在 rxjs .let() 操作中使用“this”关键字?

  21. 21

    为什么在带有 dict 的 if 语句中使用关键字“and”会出现逻辑错误?

  22. 22

    为什么大多数在线代码示例在遵循协议功能时都使用override关键字?

  23. 23

    为什么不必使用关键字static?

  24. 24

    为什么在调用函数时使用`go`关键字?

  25. 25

    为什么ReSharper建议使用“ as”关键字而不是“ is”?

  26. 26

    为什么Java / Scala使用扩展/实现关键字?

  27. 27

    为什么IViewLocalizer无法使用关键字{0}?

  28. 28

    为什么ReSharper建议使用“ as”关键字而不是“ is”?

  29. 29

    为什么在这里使用克隆关键字

热门标签

归档