質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

1回答

5846閲覧

【C#】 クラスの関数からクラスの外の変数にアクセスしたい

Kuloba

総合スコア25

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2019/10/21 08:52

【C#】 クラスのvoid関数からクラスの外の変数にアクセスしたい

今ゲームを作っています。 それで、クラスのvoid関数からクラスの外の変数にアクセスしたいんです。
ですが、クラス内の関数から、クラス外の変数にアクセスしようとすると、

コード説明
CS0120静的でないフィールド、メソッド、またはプロパティ 'Games.PlayersImage' で、オブジェクト参照が必要です

というようなエラーが表示されてしまいます。
PlayersImageをstaticにしたらエラーは出ませんが、
作っているゲームは別フォームからデバッグ(数値の操作など)を行うので、
デバッグからメインのPlayersImage (staticの)にアクセスすると(しようとすると)エラーが出ます。
#コード(C#)

C#

1省略ーーーーーーーーーーーーー 2 public partial class Games : Form 3 { 4 internal Bitmap PlayersImage = new Bitmap(1600, 320); 5 internal class Players 6 { 7 internal void Draw() 8 { 9 Graphics gr = Graphics.FromImage(PlayersImage); ///ここでエラー 10 gr.Clear(Color.Transparent); 11 gr.Dispose(); 12 } 13 } 14省略ーーーーーーーーーー

試したもの

クラスの関数から他の変数にアクセスする方法を調べた -> 丁度いいものが見つからなかった。
クラス内の関数をstaticにしてみた -> エラー発生(その関数の呼び出しで)
クラス内の関数にProgramを宣言し、Programから作業を行った -> またまたエラー

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

クリップした質問は、後からいつでもMYページで確認できます。

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

バッドをするには、ログインかつ

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

guest

回答1

0

そもそもクラスとは、それ単体が閉じた一つの(小さな)プログラムです。
クラスに対してアクセスするためには、public なメンバ(メンバ変数・プロパティ・メソッド)を経由する以外にないように、クラスから外へのアクセスもまた、あらかじめルートが用意されていなければ行うことはできません。

今回の場合、そもそも Players クラスの作りが悪いですね。
Players クラスは自身のイメージを表示するために、PlayersImage を必要としているのでしょう?
であればそれは外へ取りに行くのではなく、Players クラスの中に持っているべきです。
設定するとすればプロパティとするか、あるいはコンストラクターの引数で与えるなどとして「外から設定できるようにする」べきです。

投稿2019/10/21 09:00

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問