无法从其他类访问公共委托

时间:2015-03-27 15:01:56

标签: c#

我正在观看Scott Alan关于Pluralsight的关于C#中泛型的课程。在视频中,他为扩展方法创建了一个新的静态类,他在这个类中加入了一个公共委托,它看起来像这样:

using System;
using System.Collections.Generic;
using System.ComponentModel;

namespace ScottAllen.Generics
{
    public static class BufferExtensions
    {

        public delegate void Printer(object data);

        public static void Dump<T>(this IBuffer<T> buffer, Printer print)

Program.cs我想使用此委托,在视频中我看到他只是在Main方法中写道

Printer print...并且编译器会识别Printer但是当我尝试时,Printer会用红色加下划线,我只能使用完全限定名{ {1}}。我试图清理项目,重新构建它等等,但似乎这不是问题。 ScottAllen.Generics.BufferExtensions.Printer看起来像这样:

Program.cs

所以基本上我的问题是,为什么在视频中他可以使用using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ScottAllen.Generics { class Program { static void Main(string[] args) { ScottAllen.Generics.BufferExtensions.Printer .. 而我无法在不使用完全限定名称的情况下访问Printer需要更改的内容?

3 个答案:

答案 0 :(得分:2)

由于您与BufferExtensions位于同一名称空间,这就足够了:

static void Main(string[] args)
{
     BufferExtensions.Printer ..

由于PrinterBufferExtensions类中声明, 指定BufferExtensions类型时无法遗漏Printer

或者,您可以使用指令:

将别名赋予BufferExtensions.Printer
...
using Printer = BufferExtensions.Printer;
...
    static void Main(string[] args)
    {
         Printer ..

答案 1 :(得分:1)

在另一个类中,您至少需要输入静态方法的名称:

BufferExtensions.Printer myPriner;

在C#6中,你可以用“使用静态”来做到这一点(见here

using System.Console;

public void DoSomething()
{
  WriteLine("Line 1");
  WriteLine("Line 2");
  WriteLine("Line 3");
}

答案 2 :(得分:1)

您可以将Printer定义移到课堂之外:

namespace ScottAllen.Generics
{
  public delegate void Printer(object data);
  ...
}

如果您在Printer命名空间或包含ScottAllen.Generics,则可以使用using ScottAllen.Generics;类型而不带任何前缀。