Download presentation
Presentation is loading. Please wait.
Published byFanny Tedja Modified 約 6 年前
1
継承の概念と用語 元クラスAA 元のクラス メンバー(フィールド) 変数x,変数y 配列z 新クラス 新クラスAB 追加メンバー 変数 v
派生する 導出する ベースクラス スーパークラス 基本クラス 親クラス 派生クラス サブクラス 導出クラス 子クラス 継承の概念と用語 プロパティ p1 元クラスAA メンバー(フィールド) 変数x,変数y 配列z 新クラスAB 追加メンバー 変数 v メソッド func1 元のクラス 新クラス プロパティ p2 メソッド func2 新プロパティ p2 新メソッド func2 メソッドの再定義 (関数定義の変更) → オーバーライド
2
× ○ アクセス修飾子のまとめ アクセス範囲 private protected public クラスの作成者のみが使える クラス外
派生クラス内 クラス内 private × ○ protected public クラスの利用者なら誰でも使える 派生クラスを作成する人は使える その他に,internal,prtected internal等のアクセス修飾子があるが,説明省略
3
クラスの階層構造とクラスライブラリ クラス Object 継承 全てのクラスの元になる スーパー ベースクラス Object クラス A
クラス X 継承 継承 クラス B クラス Y 継承 継承 C#では,プログラマが定義したクラスは自動的にObjectクラスを継承している →Objectクラスのメソッドを用いることができる クラス C クラス Z 継承 継承 クラス D1 クラス U1 クラス D2 クラス U2 クラス D3
4
システムで提供されるクラスライブラリの一部
System.Object System.Activator System.AppDomainSetup ---- System.IAppDomainSetup System.Array ---- System.ICloneable, System.Collections.IList, System.Collections.ICollection, System.Collections.IEnumerable System.Attribute System.AttributeUsageAttribute System.CLSCompliantAttribute System.ContextStaticAttribute System.FlagsAttribute System.LoaderOptimizationAttribute System.MTAThreadAttribute System.NonSerializedAttribute System.ObsoleteAttribute System.ParamArrayAttribute System.SerializableAttribute System.STAThreadAttribute System.ThreadStaticAttribute System.BitConverter System.Buffer System.CharEnumerator ---- System.Collections.IEnumerator, System.ICloneable System.Console System.Convert System.DBNull ---- System.Runtime.Serialization.ISerializable, System.IConvertible System.Delegate System.MulticastDelegate System.AssemblyLoadEventHandler System.AsyncCallback System.CrossAppDomainDelegate System.EventHandler System.ResolveEventHandler System.UnhandledExceptionEventHandler System.Environment System.EventArgs System.AssemblyLoadEventArgs System.ResolveEventArgs System.UnhandledExceptionEventArgs System.Exception System.ApplicationException System.SystemException System.AppDomainUnloadedException System.ArgumentException System.ArgumentNullException System.ArgumentOutOfRangeException System.DuplicateWaitObjectException System.Reflection.MemberInfo System.Type ---- System.Reflection.IReflect System.String ---- System.IComparable, System.ICloneable, System.IConvertible, System.Collections.IEnumerable System.TimeZone System.UriBuilder System.ValueType System.ArgIterator System.Boolean ---- System.IComparable, System.IConvertible System.Byte ---- System.IComparable, System.IFormattable, System.IConvertible System.Char ---- System.IComparable, System.IConvertible System.DateTime ---- System.IComparable, System.IFormattable, System.IConvertible System.Decimal ---- System.IFormattable, System.IComparable, System.IConvertible System.Double ---- System.IComparable, System.IFormattable, System.IConvertible System.Enum System.AttributeTargets System.DayOfWeek System.Environment.SpecialFolder System.LoaderOptimization System.PlatformID System.TypeCode System.UriHostNameType System.UriPartial System.Guid ---- System.IFormattable, System.IComparable System.Int System.IComparable, System.IFormattable, System.IConvertible System.Int System.IComparable, System.IFormattable, System.IConvertible System.Int System.IComparable, System.IFormattable, System.IConvertible System.IntPtr ---- System.Runtime.Serialization.ISerializable System.RuntimeArgumentHandle System.RuntimeFieldHandle ---- System.Runtime.Serialization.ISerializable System.RuntimeMethodHandle ---- System.Runtime.Serialization.ISerializable System.RuntimeTypeHandle ---- System.Runtime.Serialization.ISerializable System.SByte ---- System.IComparable, System.IFormattable, System.IConvertible System.Single ---- System.IComparable, System.IFormattable, System.IConvertible System.TimeSpan ---- System.IComparable System.TypedReference System.UInt System.IComparable, System.IFormattable, System.IConvertible System.UInt System.IComparable, System.IFormattable, System.IConvertible System.UInt System.IComparable, System.IFormattable, System.IConvertible System.UIntPtr ---- System.Runtime.Serialization.ISerializable System.Void System.Version ---- System.ICloneable, System.IComparable System.WeakReference ---- System.Runtime.Serialization.ISerializable System.ArithmeticException System.DivideByZeroException System.NotFiniteNumberException System.OverflowException System.ArrayTypeMismatchException System.BadImageFormatException System.CannotUnloadAppDomainException System.ContextMarshalException System.ExecutionEngineException System.FormatException System.UriFormatException System.IndexOutOfRangeException System.InvalidCastException System.InvalidOperationException System.ObjectDisposedException System.InvalidProgramException System.MemberAccessException System.FieldAccessException System.MethodAccessException System.MissingMemberException System.MissingFieldException System.MissingMethodException System.MulticastNotSupportedException System.NotImplementedException System.NotSupportedException System.PlatformNotSupportedException System.NullReferenceException System.OutOfMemoryException System.RankException System.StackOverflowException System.TypeInitializationException System.TypeLoadException System.DllNotFoundException System.EntryPointNotFoundException System.TypeUnloadedException System.UnauthorizedAccessException System.GC System.LocalDataStoreSlot System.MarshalByRefObject System.AppDomain ---- System._AppDomain, System.Security.IEvidenceFactory System.ContextBoundObject System.Uri ---- System.Runtime.Serialization.ISerializable System.Math System.OperatingSystem ---- System.ICloneable System.Random
5
名前空間 システムで定義されたクラス Message ユーザーが独自に定義したクラス Message 同じ名前なので問題が発生
(バッティング) Message 名前空間 System System.Message Message 名前空間 User User.Message
6
名前空間の利用 正式な名前 名前空間名 クラス名 メソッド名 名前空間の例 名前空間Systemの利用を宣言 名前空間名を省略 System
class kadai70 { static void Main() { System.Console.WriteLine("Hello World!"); } } 正式な名前 名前空間名 クラス名 メソッド名 名前空間の例 System System.Windows System.Windows.Form System.Text System.Drawing System.Drawing.Drawing2D Microsoft.Win32 これらは,それぞれ異なった名前空間 using System; class kadai70 { static void Main() { Console.WriteLine("Hello World!"); } } 名前空間Systemの利用を宣言 ドットで区切って長い名前空間を定義できる 名前空間名を省略
7
名前空間の定義 キーワードnamespaceを用いて 名前空間Matsushimaの宣言 正式なクラス名は Matsushima.Time
{ class Time { protected int min; public int Minute { ・・・ } // 省略 } class kadai70 static void Main() { Time t; // 省略 } } 正式なクラス名は Matsushima.Time になる この内部で定義したクラスは,すべて Matsushima.xxxxx となる
8
+ クラスライブラリの利用 コンパイル System.Windows.Forms.dllへの参照設定 プログラムの実行!
class kadai81a { public static void Main() { System.Windows.Forms.MessageBox.Show( "松島(各自が自分の名前を入れる)のメッセージボックスが出たぞ","基礎計算機演習"); } } using System.Windows.Forms; class kadai81a { public static void Main() { MessageBox.Show("松島(各自が自分の名前を入れる)のメッセージボックスが出たぞ","基礎計算機演習"); } } System.Windows.Forms名前空間を利用することを宣言 → クラスの正式名称を省略できる コンパイル System.Windows.Forms.dllへの参照設定 クラスライブラリの 実行ファイル (System.Windows.Forms.dll) + 実行プログラム ファイル (例えば kadai81a.exe) クラスライブラリファイルSystem.Windows.Forms.dllと結合して(リンクして)実行することを宣言 プログラムの実行! 注) 実行ファイルは,通常,プロジェクト名に.exeが付いたファイル. プロジェクトフォルダ内のdebugフォルダやreleaseフォルダにある.
9
グラフィカルユーザーインターフェースのクラス
Graphical User Interface; GUI グラフィカルユーザーインターフェースのクラス System.Windows.Forms名前空間 GUIの中心になるウインドウズフォームのクラスが定義されている名前空間 namespace Matsushima { using System.Windows.Forms; class MyWindow : Form { public MyWindow() {} } class koushu8a public static void Main() { MyWindow mw = new MyWindow(); Application.Run(mw); } } Formクラスを継承した自分用の クラス MyWindow MyWindowクラスのインスタンス作成 Applicationクラスの静的メソッドRun() MyWindowクラスをアプリケーションとして実行する 注)このソースのコンパイルと実行には, System.Windows.Forms.dllへの参照設定 が必要
10
Formクラスから継承されたプロパティの設定
Formのプロパティを使う namespace Matsushima { using System.Windows.Forms; class MyWindow : Form { public MyWindow() {} } class koushu8b public static void Main() { MyWindow mw = new MyWindow(); mw.Text = "これは松島のウィンドウだ"; mw.Height = 100; mw.Width = 500; Application.Run(mw); } } 注)このソースのコンパイルと実行には, System.Windows.Forms.dllだけではなく, Sysutem.dllへの参照設定も必要 Formクラスから継承されたプロパティの設定
11
Console.WriteLine()メソッドはコンソールウィンドウに文字を出力する
プロパティの設定だけではできないこと ウィンドウ内に文字を描画する namespace Matsushima { using System.Windows.Forms; class MyWindow : Form { public MyWindow() {} } class koushu8b public static void Main() { MyWindow mw = new MyWindow(); mw.Text = "これは松島のウィンドウだ"; mw.Height = 100; mw.Width = 500; Console.WriteLine("ウィンドウ内に文字を書いたぞ!"); Application.Run(mw); } } Console.WriteLine()メソッドはコンソールウィンドウに文字を出力する
12
Formクラスのプロテクトメソッド OnPaint() を派生クラスでオーバーライドしている
ウィンドウ内に文字を書く方法(正解) namespace Matsushima { using System.Windows.Forms; using System.Drawing; class MyWindow : Form { public MyWindow() {} protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.DrawString("ウィンドウ内に文字を書いたぞ!", Font, Brushes.Black, 50, 35); } } class koushu8c public static void Main() MyWindow mw = new MyWindow(); mw.Text = "これは松島のウィンドウだ"; mw.Height = 100; mw.Width = 500; Application.Run(mw); } Formクラスのプロテクトメソッド OnPaint() を派生クラスでオーバーライドしている 問題: メソッドOnPaint()はいったいいつ呼び出されて実行されているのか?? 注)このソースのコンパイルと実行には, System.Windows.Forms.dll,System.dll, System.Drawing.dllへの参照設定が必要
13
マウスの関係する処理 マウスがウィンドウ上に入ってきたらウィンドウの背景色を赤にする
namespace Matsushima { using System.Windows.Forms; using System.Drawing; using System; class MyWindow : Form { public MyWindow() {} protected override void OnMouseEnter(EventArgs ea) { this.BackColor = Color.Red; } protected override void OnMouseLeave(EventArgs ea) this.BackColor = DefaultBackColor; } class koushu8d public static void Main() MyWindow mw = new MyWindow(); mw.Text = "これは松島のウィンドウだ"; mw.Height = 100; mw.Width = 500; Application.Run(mw); } マウスがウィンドウ上に入ってきたらウィンドウの背景色を赤にする マウスがウィンドウ上から出て行ったらウィンドウの背景色を元に戻す 注)このソースのコンパイルと実行には, System.Windows.Forms.dll,System.dll, System.Drawing.dllへの参照設定が必要
14
GUIプログラミングの基本=イベント イベントとは イベントの例 ウィンドウやウィンドウ内のパーツ(ボタン・スクロールバーなど)に発生する
様々な出来事・きっかけ MouseEnterイベント発生 MouseLeaveイベント発生 イベントの例 マウスがウィンドウ上に入った マウスがウィンドウ上から出た マウスのボタンが押された キーボードのキーが押された ウィンドウが閉じられた ウィンドウが開かれた ウィンドウのサイズが変わった 他のウィンドウの下になっていたウィンドウ全体が前に出た 他のウィンドウに隠れていた一部分が前に出た MouseDownイベント発生 このタイプのイベントが発生したらプログラムはウィンドウ内の文字や図形を描かなければならない → Paint イベント発生 ウィンドウが隠れて出たり,サイズが変わったりするたびにウィンドウ内を描画するのか? 答え: YES! それがウィンドウプログラミングの基本
15
OnPaint()メソッドのタイミング 問題: メソッドOnPaint()はいったいいつ呼び出されて実行されているのか?? 答え:
namespace Matsushima { using System.Windows.Forms; using System.Drawing; class MyWindow : Form { public MyWindow() {} protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.DrawString("ウィンドウ内に文字を書いたぞ!", Font, Brushes.Black, 50, 35); } } class koushu8c public static void Main() MyWindow mw = new MyWindow(); mw.Text = "これは松島のウィンドウだ"; mw.Height = 100; mw.Width = 500; Application.Run(mw); } 問題: メソッドOnPaint()はいったいいつ呼び出されて実行されているのか?? 答え: メソッドOnPaint()はPaintイベントが発生するたびに毎回呼び出されている 注)このソースのコンパイルと実行には, System.Windows.Forms.dll,Sysutem.dll, System.Drawing.dllへの参照設定が必要
16
GUIプログラムの実行方式=イベント駆動(イベントドリブン)
イベント発生のタイミングも順序も予測不能 非GUIプログラム GUIプログラム class koushu8 { public static void Main() { int x,i ; x = x + 10; Console.WriteLine(・・・); for(i = 0; i < 10; i++) { ・・・・ } if (x > 20) ・・・・ } } class koushu8 { public static void Main() { MyWindow mw = new MyWindow(); mw.Text = "題名"; mw.Height = 100; mw.Width = 500; Application.Run(mw); } } 予測可能な一定の順序で処理が進む イベントA発生 イベントA 処理 イベントループ プログラム終了 イベントB発生 イベントB 処理 ウィンドウクローズイベント発生 イベントC発生 イベントC 処理 イベントを処理するルーチン → イベントハンドラ GUIではプログラマの仕事のほとんどはイベントハンドラの作成!
17
VisualStudio.NETにおけるGUIプログラム作成の流れ
フォームとコントロールは既存のクラスライブラリ VisualStudio.NETのフォームデザイナで作成可能 (1) 配置デザイン フォームを作成し,ボタン,スクロールバーなどの GUI部品(コントロール)を配置 デザインに対応したソースコードをフォームデザイナが自動作成 (2) プロパティ設定 ウィンドウの色やタイトル,ボタンの性質などの設定 (3) イベントハンドラ作成 マウスダウンやボタンクリックなどのイベントハンドラの プログラムを作成してゆく 今まで授業で使用していたのは コードエディタだった! VisualStudio.NETのコードエディタで作成
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.