ページ 11

C# デリゲートについて

Posted: 2017年3月28日(火) 11:23
by keito94
只今、C#のデリゲートについて学んでいるのですが、delegateと宣言するとデリゲートが使えるということはわかったのですが…。
最初のコードでは整数型を宣言しているのに、

コード:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

delegate void SomeDelegate(int a);
namespace CSharpTraning
{
    class Program
    {
        public static void Main(string[] args)
        {
            SomeDelegate a = A;
            a(256);
        }
        static void A(int n)
        {
            Console.WriteLine("Aが呼ばれました。");
        }
    }
}
2番めのコードではなぜ整数型を宣言していないのでしょうか?

コード:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

delegate void ShowMessage();

class Person
{
    string name;
    public Person(string name) { this.name = name; }
    public void ShowName() { Console.Write("名前:{0}\n", name); }
}

namespace CSharpTraning
{
    class Program
    {
        public static void Main(string[] args)
        {
            Person p = new Person("夜刀神十香");
            ShowMessage show = new ShowMessage(p.ShowName);
            show();
        }
    }
}

Re: C# デリゲートについて

Posted: 2017年3月28日(火) 11:59
by YuO
単純に,対応するメソッドの形が,
  • 前者はint型の引数を持ち,値を返さないメソッド
  • 後者は引数を持たず,値を返さないメソッド
だからです。それにあわせて,
  • 前者のデリゲートで呼び出されるメソッドCSharpTraning.Program.Aはint型の引数を持ち,値を返さない
  • 後者のデリゲートで呼び出されるメソッドPerson.ShowNameは引数を持たず,値を返さない
となっています。

Re: C# デリゲートについて

Posted: 2017年3月28日(火) 12:40
by keito94
意外と単純なんですね。ありがとうございました。