Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 操作和委托之间的可访问性_C#_.net_Delegates - Fatal编程技术网

C# 操作和委托之间的可访问性

C# 操作和委托之间的可访问性,c#,.net,delegates,C#,.net,Delegates,在下面的代码中,我创建了一个名为Mhd的委托-就像操作委托一样。我的问题是:如果两个委托是公共,为什么只有操作委托可以从另一个类中看到,而不是Mhd static void Main(string[] args) { new Test().Yaser(); //this can be done new Test().mhd(); //this can not be done } class Test { public

在下面的代码中,我创建了一个名为
Mhd
的委托-就像
操作
委托一样。
我的问题是:如果两个委托是公共,为什么只有
操作
委托可以从另一个类中看到,而不是
Mhd

static void Main(string[] args)
    {
        new Test().Yaser(); //this can be done
        new Test().mhd(); //this can not be done
    }
    class Test
    {
        public Action Yaser;
        public delegate void Mhd();
    }

    //and Action definition is   public delegate void Action();
感谢您的帮助:)

声明类型为
Action
的字段,而

    public delegate void Mhd();
Mhd
声明为委托类型

声明类型为
Action
的字段,而

    public delegate void Mhd();
Mhd
声明为委托类型

声明类型为
Action
的字段,而

    public delegate void Mhd();
Mhd
声明为委托类型

声明类型为
Action
的字段,而

    public delegate void Mhd();

Mhd
声明为委托类型。

因为
Mhd
不是您的类的成员。它是您在类中声明的委托类型

因此,不能将其视为成员方法或属性,但可以使用它声明该类型的变量

Test.Mhd myDelegate;

因为
Mhd
不是你们班的成员。它是您在类中声明的委托类型

因此,不能将其视为成员方法或属性,但可以使用它声明该类型的变量

Test.Mhd myDelegate;

因为
Mhd
不是你们班的成员。它是您在类中声明的委托类型

因此,不能将其视为成员方法或属性,但可以使用它声明该类型的变量

Test.Mhd myDelegate;

因为
Mhd
不是你们班的成员。它是您在类中声明的委托类型

因此,不能将其视为成员方法或属性,但可以使用它声明该类型的变量

Test.Mhd myDelegate;

为了让我的答案有意义,记住代表的定义很重要。根据:

委托是一种引用类型,可用于封装命名方法或匿名方法

代表是一个参考

如果你熟悉C++,你知道另一种说法是:<强>引用<强>是<强>指针< /强>。(事实上,C++开发人员通过函数指针获得了与C类委托类似的功能。) 代表作为参考人的意义是什么?在公共类型系统提供的基本构造中,.NET Framework还有另一个引用类型:

class
。说委托是引用类型就像说委托是类一样。让我们回顾一下如何使用类

在使用类的实例之前,需要遵循3个步骤:

  • 类型声明:
    类测试{public Action Yaser;}
  • 实例声明:
    类测试testClassObject
  • 实例化:
    testClassObject=newtest()
(通常,我们结合实例声明和实例化)

我们说过代表是班级。因此,委托使用遵循相同的模式:

  • 类型声明:
    公共委托void Mhd()
  • 实例声明:
    publicmhd-myMhd
  • 实例化:
    myDelegateField=newmhd(somethod)
但是等等,什么是
SomeMethod
?真的,没关系。我们所知道的是,它的签名必须与Mhd的签名相匹配。换句话说,
void SomeMethod()

让我们检查并修复您的类声明。可能的实现如下所示:

class Test
{
    public Action Yaser;        // instance declaration
    public delegate void Mhd(); // type declaration
    public Mhd myMhd;           // instance declaration

    public Test()
    {
        // instantiation
        this.myMhd = new Mhd(this.SomeMethod);
    }

    private void SomeMethod()
    {
        // your implementation
    }
}

为了让我的答案有意义,记住代表的定义很重要。根据:

委托是一种引用类型,可用于封装命名方法或匿名方法

代表是一个参考

如果你熟悉C++,你知道另一种说法是:<强>引用<强>是<强>指针< /强>。(事实上,C++开发人员通过函数指针获得了与C类委托类似的功能。) 代表作为参考人的意义是什么?在公共类型系统提供的基本构造中,.NET Framework还有另一个引用类型:

class
。说委托是引用类型就像说委托是类一样。让我们回顾一下如何使用类

在使用类的实例之前,需要遵循3个步骤:

  • 类型声明:
    类测试{public Action Yaser;}
  • 实例声明:
    类测试testClassObject
  • 实例化:
    testClassObject=newtest()
(通常,我们结合实例声明和实例化)

我们说过代表是班级。因此,委托使用遵循相同的模式:

  • 类型声明:
    公共委托void Mhd()
  • 实例声明:
    publicmhd-myMhd
  • 实例化:
    myDelegateField=newmhd(somethod)
但是等等,什么是
SomeMethod
?真的,没关系。我们所知道的是,它的签名必须与Mhd的签名相匹配。换句话说,
void SomeMethod()

让我们检查并修复您的类声明。可能的实现如下所示:

class Test
{
    public Action Yaser;        // instance declaration
    public delegate void Mhd(); // type declaration
    public Mhd myMhd;           // instance declaration

    public Test()
    {
        // instantiation
        this.myMhd = new Mhd(this.SomeMethod);
    }

    private void SomeMethod()
    {
        // your implementation
    }
}

为了让我的答案有意义,记住代表的定义很重要。根据:

委托是一种引用类型,可用于封装命名方法或匿名方法

代表是一个参考

如果你熟悉C++,你知道另一种说法是:<强>引用<强>是<强>指针< /强>。(事实上,C++开发人员通过函数指针获得了与C类委托类似的功能。) 代表作为参考人的意义是什么?在公共类型系统提供的基本构造中,.NETFR