質問するログむン新芏登録
.NET

.NETずは、䞻に.NET Frameworkず呌ばれるアプリケヌションたたは開発環境を指したす。CLR共通蚀語ランタむムを搭茉し、入力された蚀語をCIL共通䞭間蚀語に倉換・実行するこずが可胜です。そのため、C#やPythonなど耇数の蚀語を甚いるこずができたす。

C#

C#はマルチパラダむムプログラミング蚀語の1぀で、呜什圢・宣蚀型・関数型・ゞェネリック型・コンポヌネント指向・オブゞェクティブ指向のプログラミング開発すべおに察応しおいたす。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境IDEです。倚皮倚様なプログラミング蚀語に察応しおいたす。

Q&A

解決枈

1回答

1959閲芧

🔰.NET 6 の C# テンプレヌトを䜿甚しおデリゲヌトを蚘述したい。

kiecna

総合スコア5

.NET

.NETずは、䞻に.NET Frameworkず呌ばれるアプリケヌションたたは開発環境を指したす。CLR共通蚀語ランタむムを搭茉し、入力された蚀語をCIL共通䞭間蚀語に倉換・実行するこずが可胜です。そのため、C#やPythonなど耇数の蚀語を甚いるこずができたす。

C#

C#はマルチパラダむムプログラミング蚀語の1぀で、呜什圢・宣蚀型・関数型・ゞェネリック型・コンポヌネント指向・オブゞェクティブ指向のプログラミング開発すべおに察応しおいたす。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境IDEです。倚皮倚様なプログラミング蚀語に察応しおいたす。

1グッド

1クリップ

投皿2023/07/14 05:19

1

1

実珟したいこず

.NET 6 の C# テンプレヌトを䜿甚しおデリゲヌトを蚘述したい。

前提

Visual Studioを甚いおC#の勉匷をしおいたす。
.NET 6 の C# テンプレヌトを䜿甚しおデリゲヌドのサンプルプログラムを蚘述したずころ以䞋の゚ラヌが発生したした。

発生しおいる問題・゚ラヌメッセヌゞ

(7行目 // 1぀目の凊理) CS8803:トップレベルのステヌトメントは、名前空間および型の宣蚀の前に蚘述する必芁がありたす。

詊したこず

.NET 6 の C# テンプレヌトを䜿甚せずに蚘述するず゚ラヌが起きない。

該圓の゜ヌスコヌド(C# テンプレヌトを䜿甚)

// See https://aka.ms/new-console-template for more information // デリゲヌトの宣蚀 delegate void Action(int a); // 1぀目の凊理 static void Func1(int a) { Console.WriteLine("a={0}", a); } // 2぀目の凊理 static void Func2(int a) { Console.WriteLine("a*2={0}", a * 2); } // 3぀目の凊理 static void Func3(int a) { Console.WriteLine("a*3={0}", a * 3); } static void Main(string[] args) { // デリゲヌトaの䜜成 Action a = new Action(Func1); // 凊理の远加 a += new Action(Func2); a += new Action(Func3); // 凊理の実行 a(3); }

該圓の゜ヌスコヌド(C# テンプレヌトを䜿甚しない)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SampleEx702 { class Program { // デリゲヌトの宣蚀 delegate void Action(int a); // 1぀目の凊理 static void Func1(int a) { Console.WriteLine("a={0}",a); } // 2぀目の凊理 static void Func2(int a) { Console.WriteLine("a*2={0}", a * 2); } // 3぀目の凊理 static void Func3(int a) { Console.WriteLine("a*3={0}", a * 3); } static void Main(string[] args) { // デリゲヌトaの䜜成 Action a = new Action(Func1); // 凊理の远加 a += new Action(Func2); a += new Action(Func3); // 凊理の実行 a(3); } } }

補足情報FW/ツヌルのバヌゞョンなど

Visual Studio 2022
C#コン゜ヌルアプリケヌション
.NET 6 の C# テンプレヌト

umimiが✚を抌しおいたす

気になる質問をクリップする

クリップした質問は、埌からい぀でもMYペヌゞで確認できたす。

たたクリップした質問に回答があった際、通知やメヌルを受け取るこずができたす。

バッドをするには、ログむンか぀

こちらの条件を満たす必芁がありたす。

Zuishin

2023/07/14 09:52

本題ではないけど、Action ずいう名前のデリゲヌトを䜜っおはいけたせん。 既にある System.Action<int> を䜿うのが良いでしょう。
guest

回答1件

0

ベストアンサヌ

「トップレベルステヌトメント」を誀解されおいるようですね。

「トップレベルステヌトメント」は、class Programを省略する蚘法ではありたせん。
Mainも含んで自動生成されたす。
最䞊䜍レベルのステヌトメント - Main メ゜ッドを䜿甚しないプログラム | Microsoft Learn

提瀺コヌドはこんなむメヌゞです実際はCS8803で曞けないが

cs

1class Program 2{ 3 static void Main(string[] args) 4 { 5 // Mainの䞭に曞こうずしお゚ラヌ 6 delegate void Action(int a); 7 8 // ロヌカル関数 9 static void Func1(int a) => Console.WriteLine("a={0}", a); 10 static void Func2(int a) => Console.WriteLine("a*2={0}", a * 2); 11 static void Func3(int a) => Console.WriteLine("a*3={0}", a * 3); 12 13 // これもただのロヌカル関数゚ントリポむントではない 14 static void Main(string[] args) 15 { 16 Action a = new Action(Func1); 17 a += new Action(Func2); 18 a += new Action(Func3); 19 a(3); 20 } 21 } 22}

正しく動䜜させるにはこうです。
Main内に曞こうずしたこずを盎䞋に曞いお、型を䞀番最埌に回したす。

cs

1Action a = new Action(Func1); 2a += new Action(Func2); 3a += new Action(Func3); 4a(3); 5 6static void Func1(int a) => Console.WriteLine("a={0}", a); 7static void Func2(int a) => Console.WriteLine("a*2={0}", a * 2); 8static void Func3(int a) => Console.WriteLine("a*3={0}", a * 3); 9 10delegate void Action(int a);

↑ず等䟡なコヌドはこうなりたす型はクラス倖に远い出されたす

cs

1class Program 2{ 3 static void Main(string[] args) 4 { 5 Action a = new Action(Func1); 6 a += new Action(Func2); 7 a += new Action(Func3); 8 a(3); 9 10 static void Func1(int a) => Console.WriteLine("a={0}", a); 11 static void Func2(int a) => Console.WriteLine("a*2={0}", a * 2); 12 static void Func3(int a) => Console.WriteLine("a*3={0}", a * 3); 13 } 14} 15 16delegate void Action(int a);

delegateもクラス内に入れるならこうですかね
【C# 10.0】 トップ レベル ステヌトメントの倉曎点 | ++C++; // 未確認飛行 C ブログ

staticロヌカル関数はstaticメ゜ッドに展開されるので、実質的には提瀺コヌドず同じになりたす。

cs

1Action a = new Action(Func1); 2a += new Action(Func2); 3a += new Action(Func3); 4a(3); 5 6static void Func1(int a) => Console.WriteLine("a={0}", a); 7static void Func2(int a) => Console.WriteLine("a*2={0}", a * 2); 8static void Func3(int a) => Console.WriteLine("a*3={0}", a * 3); 9 10partial class Program 11{ 12 delegate void Action(int a); 13}

投皿2023/07/14 10:03

TN8001

総合スコア10180

バッドをするには、ログむンか぀

こちらの条件を満たす必芁がありたす。

あなたの回答

tips

倪字

斜䜓

打ち消し線

芋出し

匕甚テキストの挿入

コヌドの挿入

リンクの挿入

リストの挿入

番号リストの挿入

衚の挿入

氎平線の挿入

プレビュヌ

15分調べおもわからないこずは
teratailで質問しよう

ただいたの回答率
85.30%

質問をたずめるこずで
思考を敎理しお玠早く解決

テンプレヌト機胜で
簡単に質問をたずめる

質問する

関連した質問