• 締切済み

VC#2010 クラスの実体化について

こんにちは、 現在の環境はWindows7でVisualStudio2010を使用しています。 最近 Cシャープを勉強し始め、疑問に思い質問させていただきました。 クラスを作成し、そのクラスの実体化を行わないで、 クラスのメンバ変数やメンバ関数などがエラーなく使えてしまいました。 C++のときはビルドエラーになっていたのにCシャープでは 実体化を行わなくてもよいと言いうことですか? 回答お願いします

みんなの回答

回答No.3

staticがついたメンバはインスタンスメンバではなくクラスメンバになります。 これは,C++でもC#でも同じです。 C++でビルドエラーになったというのは,単純にインスタンスメンバを呼び出していたからではないですか。 # C++ではクラスメンバへのアクセスはclass::memberという書式になります。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

どこにもインスタンスなしで使えてるインスタンスのメンバ関数やメンバ変数はないですが。 インスタンスのメンバ関数やメンバ変数と、クラスのメンバ関数やメンバ変数を混同されていませんか?

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

具体的にはどのようなコードを書かれたのですか? C++,C#どちらも、インスタンスのメンバ変数や関数はインスタンスなしには扱えません。

hanyu-yuugo
質問者

補足

以下がソースになります using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; { public partial class Form1 : Form { public Form1() { InitializeComponent(); textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; } private void button1_Click(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { } private void button3_Click(object sender, EventArgs e) { } /* 加算 */ private void button5_Click(object sender, EventArgs e) { #region 加算処理 string buff = textBox1.Text; if (!Validation.IsNumeric(buff)) { MessageBox.Show("テキスト1に、数値以外の値が入力されています"); return; } double a = System.Convert.ToDouble(textBox1.Text); buff = textBox2.Text; if (!Validation.IsNumeric(buff)) //ここで実体化せずクラスの関数を直接記述してます。 { MessageBox.Show("テキスト2に、数値以外の値が入力されています"); return; } double b = System.Convert.ToDouble(textBox2.Text); double Kai = a + b; textBox3.Text = System.Convert.ToString(Kai); #endregion }   } } public sealed class Validation { #region IsNumeric メソッド (+1) /// ----------------------------------------------------------------------------- /// <summary> /// 文字列が数値であるかどうかを返します。</summary> /// <param name="stTarget"> /// 検査対象となる文字列。<param> /// <returns> /// 指定した文字列が数値であれば true。それ以外は false。</returns> /// ----------------------------------------------------------------------------- public static bool IsNumeric(string stTarget) { double dNullable; return double.TryParse( stTarget, System.Globalization.NumberStyles.Any, null, out dNullable ); } /// ----------------------------------------------------------------------------- /// <summary> /// オブジェクトが数値であるかどうかを返します。</summary> /// <param name="oTarget"> /// 検査対象となるオブジェクト。<param> /// <returns> /// 指定したオブジェクトが数値であれば true。それ以外は false。</returns> /// ----------------------------------------------------------------------------- public static bool IsNumeric(object oTarget) { return IsNumeric(oTarget.ToString()); } #endregion } static class Constants { #region 定義 public const double PAI = 3.14159; public const int SpeedOfLight = 300000; // km per sec. #endregion }

関連するQ&A