C#コンパイルエラーCS1520の原因と対策を解説
CS1520は、C#のコンパイルエラーのひとつです。
メソッドを定義する際に、戻り値の型が記述されていない場合に発生します。
戻り値を返さない場合はvoidを指定する必要があり、またコンストラクター名とクラス名の大文字小文字が一致しない場合もエラーとなるため、適切な対応が求められます。
エラー発生の原因
戻り値の型が未指定の場合
C#ではメソッドには必ず戻り値の型が必要となります。
戻り値の型が宣言されない場合、コンパイラはエラー CS1520 を出力します。
たとえば、戻り値を返さないメソッドの場合はvoid
を指定する必要があります。
voidの追加と記述例
以下のサンプルコードは、戻り値の型が記述されていないためエラーが発生する例です。
using System;
public class ErrorSample
{
// 戻り値の型が指定されていないためエラーになる
MyMethod()
{
// サンプルのための空メソッド
}
public static void Main(string[] args)
{
ErrorSample sample = new ErrorSample();
sample.MyMethod();
}
}
コンパイルエラー: CS1520 - メソッドは戻り値の型を持たなければなりません。
上記のエラーを解消するためには、メソッドにvoid
を追加します。
以下は修正後の例です。
using System;
public class CorrectSample
{
// 戻り値がない場合はvoidを明示的に指定する
public void MyMethod()
{
// 処理内容はここに記述
Console.WriteLine("MyMethodは正常に動作しています。");
}
public static void Main(string[] args)
{
CorrectSample sample = new CorrectSample();
sample.MyMethod();
}
}
MyMethodは正常に動作しています。
コンストラクター名とクラス名の不一致による問題
C#ではコンストラクターはクラス名と正確に一致する必要があります。
もし大文字・小文字に違いがある場合、コンパイラはそれをコンストラクターではなく通常のメソッドと解釈し、戻り値が必要であると判断してエラーを出すことになります。
大文字・小文字ルールの確認
次のコードは、クラス名とコンストラクター名に大文字・小文字の不一致があるためエラーになる例です。
using System;
public class SampleClass
{
// コンストラクター名が"SampleClass"ではなく"sampleClass"となっているためエラーが発生する
public sampleClass()
{
Console.WriteLine("コンストラクターが呼ばれています。");
}
public static void Main(string[] args)
{
// コンストラクターのエラーが原因でオブジェクト生成に失敗する
SampleClass obj = new SampleClass();
}
}
コンパイルエラー: CS1520 - メソッドは戻り値の型を持たなければなりません。
正しくは、コンストラクター名はクラス名と完全に一致させる必要があるため、以下のように修正します。
using System;
public class SampleClass
{
// クラス名と同じ大文字・小文字で宣言する
public SampleClass()
{
Console.WriteLine("コンストラクターが正常に呼ばれました。");
}
public static void Main(string[] args)
{
SampleClass obj = new SampleClass();
}
}
コンストラクターが正常に呼ばれました。
エラー修正の対策
戻り値の型を正しく指定する方法
戻り値が不要なメソッドであっても、必ずvoid
を記述する必要があります。
メソッドを定義する際は、必ず戻り値の型を意識して宣言してください。
戻り値型の付与とコード例
以下のサンプルは、文字列を整数に変換するメソッドの例です。
戻り値の型としてint
を指定し、文字列が変換された結果を返しています。
using System;
public class ConversionSample
{
// 文字列を整数に変換するメソッド。戻り値の型はintです。
public int ConvertToInt(string numberString)
{
// 変換できない場合を考慮してエラーチェックも可能です
return int.Parse(numberString);
}
public static void Main(string[] args)
{
ConversionSample sample = new ConversionSample();
int result = sample.ConvertToInt("123");
Console.WriteLine("変換結果は " + result + " です。");
}
}
変換結果は 123 です。
コンストラクターの正しい宣言方法
コンストラクターはクラス名と正確に一致させる必要があります。
大文字・小文字に注意し、正しく宣言することでCS1520エラーを回避できます。
クラス名との整合性確認
下記のサンプルは、クラス名CorrectClass
とコンストラクター名が一致している正しい例です。
using System;
public class CorrectClass
{
// コンストラクター名がクラス名と完全に一致しています
public CorrectClass()
{
Console.WriteLine("CorrectClassのコンストラクターが実行されました。");
}
public static void Main(string[] args)
{
CorrectClass instance = new CorrectClass();
}
}
CorrectClassのコンストラクターが実行されました。
実例による検証と確認ポイント
修正前後のコード比較
エラーの原因となる記述と、その修正後のコードを比較することで、違いを確認するのが有効です。
以下に、エラーが発生する修正前のコードと、エラー解消後の正しいコードを示します。
エラー解消の確認方法とポイント
修正前のコード例
using System;
public class ExampleClass
{
// 戻り値型が指定されていないのでエラーになるメソッド
MyMethod()
{
Console.WriteLine("エラー発生中。");
}
// コンストラクターの名前がクラス名と一致しない例
public exampleClass()
{
Console.WriteLine("誤ったコンストラクター。");
}
public static void Main(string[] args)
{
ExampleClass instance = new ExampleClass();
instance.MyMethod();
}
}
コンパイルエラー: CS1520 - 戻り値の型が指定されていません。
修正後のコード例
using System;
public class ExampleClass
{
// 戻り値が不要な場合はvoidを必ず指定する
public void MyMethod()
{
Console.WriteLine("エラー解消済み。");
}
// コンストラクター名をクラス名と正確に一致させる
public ExampleClass()
{
Console.WriteLine("正しいコンストラクターが実行されました。");
}
public static void Main(string[] args)
{
ExampleClass instance = new ExampleClass();
instance.MyMethod();
}
}
正しいコンストラクターが実行されました。
エラー解消済み。
エラー解消の確認ポイントは、コンパイル時にCS1520エラーが出力されなくなったことと、プログラム実行時に意図したメッセージが表示されることです。
また、変数やメソッドの名前、特に大文字・小文字のルールを一度確認することで、同様のエラーを未然に防ぐことができます。
まとめ
この記事では、C#のCS1520エラーについて、戻り値の型が未指定の場合と、クラス名とコンストラクター名が一致しない場合の原因を説明しました。
エラーを回避するために、voidなど正しい戻り値型を指定する方法や、コンストラクター名をクラス名と正確に合わせるべき点を確認できます。
サンプルコードを通じて、修正前後の違いや確認方法も学べます。