- 締切済み
VC#2010 クラスの実体化について
こんにちは、 現在の環境はWindows7でVisualStudio2010を使用しています。 最近 Cシャープを勉強し始め、疑問に思い質問させていただきました。 クラスを作成し、そのクラスの実体化を行わないで、 クラスのメンバ変数やメンバ関数などがエラーなく使えてしまいました。 C++のときはビルドエラーになっていたのにCシャープでは 実体化を行わなくてもよいと言いうことですか? 回答お願いします
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Yune-Kichi
- ベストアンサー率74% (465/626)
回答No.3
staticがついたメンバはインスタンスメンバではなくクラスメンバになります。 これは,C++でもC#でも同じです。 C++でビルドエラーになったというのは,単純にインスタンスメンバを呼び出していたからではないですか。 # C++ではクラスメンバへのアクセスはclass::memberという書式になります。
補足
以下がソースになります 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 }