C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

構造体を分割したい

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■96301 / inTopicNo.1)  構造体を分割したい
  
□投稿者/ C# (1回)-(2020/11/10(Tue) 11:49:20)

分類:[.NET 全般] 

開発環境 VS2019
使用言語 C# Windowsフォーム

構造体は分割できないのでしょうか。
追加したクラスで、構造体の定義をしたらエラーになり困っています。
namespace partial_demonstration_1110
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

public struct DISPLAY_KYOTO
{
           メンバーは略す
         }
}
}

そこでクラスを追加し、追加したクラスでDISPLAY_KYOTOを定義しましたが
前途の通りエラーが出ました。



引用返信 編集キー/
■96302 / inTopicNo.2)  Re[1]: 構造体を分割したい
□投稿者/ Hongliang (1109回)-(2020/11/10(Tue) 12:01:44)
構造体の分割というのがどういうのを指すのかよく分かりませんが…。

class ClassA {
    StructB value; // エラー
}
class ClassB {
    public struct StructB {
    }
}

こういうことでしょうか?
// エラーが出たのであればそのエラーメッセージを記載してください。

こうではだめでしょうか?

class ClassA {
    public StructB value;
}
struct StructB { // クラスの外に出す
}

一応元のやつでもこういう風には書けますが。
class ClassA {
    ClassB.StructB value;
}

引用返信 編集キー/
■96303 / inTopicNo.3)  Re[2]: 構造体を分割したい
□投稿者/ C# (3回)-(2020/11/10(Tue) 13:04:46)
エラーメッセージは、
型または名前空間DISPLAY_KYOTOが見つかりませんでしたという内容です。


namespace partial_demonstration_1110     ←a.csファイル
{
public partial class A : Form
{
public Form1()
{
InitializeComponent();
}

public struct DISPLAY_KYOTO
{
           メンバーは略す
  }
}
}


namespace partial_demonstration_1110     ←B.csファイル
{
public partial class A :
{
public Form1()
{
InitializeComponent();
}

DISPLAY_KYOTO koto = new DISPLAY_KYOTO()
{
           メンバーは略す
  }
}
}
こちらでDISPLAY_KYOTOが見つからないというエラーがでました。



引用返信 編集キー/
■96306 / inTopicNo.4)  Re[3]: 構造体を分割したい
□投稿者/ Hongliang (1110回)-(2020/11/10(Tue) 13:49:21)
色々コードミスがあって、まるで再現できません。

とりあえず、以下の手順で問題なくビルドできました。

1. Windows Formsのプロジェクトを新規作成する(WindowsFormsApp1プロジェクト)。

2. ソリューションエクスプローラでプロジェクトを右クリックし、
 「追加」-「クラス」でForm1.Sub.csを追加する。

3. Form1.Sub.csを以下のようにする。

namespace WindowsFormsApp1
{
    partial class Form1
    {
        struct DISPLAY_KYOTO
        {
            public string name;
        }
    }
}

4. Form1.csのコードを表示させ、Form1()コンストラクタを修正する。

public Form1()
{
    DISPLAY_KYOTO kyoto = new DISPLAY_KYOTO();
    kyoto.name = "name";
    InitializeComponent();
}

引用返信 編集キー/
■96307 / inTopicNo.5)  Re[3]: 構造体を分割したい
□投稿者/ 魔界の仮面弁士 (2906回)-(2020/11/10(Tue) 14:30:00)
No96303 (C# さん) に返信
> エラーメッセージは、
> 型または名前空間DISPLAY_KYOTOが見つかりませんでしたという内容です。

DISPLAY_KYOTO koto = new DISPLAY_KYOTO();

ではなく、

partial_demonstration_1110.A.DISPLAY_KYOTO koto = new partial_demonstration_1110.A.DISPLAY_KYOTO();
A.DISPLAY_KYOTO koto = new A.DISPLAY_KYOTO();
Form1.DISPLAY_KYOTO koto = new Form1.DISPLAY_KYOTO();

とかじゃないかな…?


> namespace partial_demonstration_1110     ←a.csファイル
> {
>  public partial class A : Form
>  {
>   public Form1()
>   {
>    InitializeComponent();
>   }

「class A : Form」のコンストラクタは「public Form1()」ではなく「public A()」ですよ?

「public Form1()」にするなら、クラス定義は「class Form1 : Form」のはずです。


> namespace partial_demonstration_1110     ←B.csファイル
> {
>  public partial class A :
>  {
>   public Form1()
>   {
>    InitializeComponent();
>   }

こちらも同じ問題を抱えていますが、それとは別に、
a.cs と B.cs で名前空間やクラス名が完全同一です。

一つのクラスを、partial class として複数のファイルに分けて記述することはできますが、
「public Form1()」という定義が競合しているので、構造体の件とは別のエラーになっているはずです。
引用返信 編集キー/
■96328 / inTopicNo.6)  Re[4]: 構造体を分割したい
□投稿者/ C# (4回)-(2020/11/11(Wed) 15:59:49)
諸事情ありまして、分割しないことになりました。

回答をくださった皆様、有難うございます。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ