មេរៀនទី១: ការណែនាំពី

a

មេរៀនទី១: ការណែនាំពី
2
កម្មវិធីនេះណែនាំអំពី:

-ជំហានដំបូង Microsoft Visual Studio.NET
-ប្រើប្រាស់សំរាប់សរសេរ code Microsoft Visual Studio.NET
-សរសេរប្រើប្រាស់ Command ជាមួយ C#
-សរសេរប្រើប្រាស់ Windows ជាមួយ C#
-Microsoft Visual Studio.NET គឺជាកម្មវិធី Programming ដែលមាន
-សមាសភាព (Component) ខ្លាំងបំផុត ។ C# មានតួនាទីយ៉ាងសំខាន់ក្នុង
-កម្មវិធី .NET Framework របស់ Microsoft វាបើប្រៀបធៀបជាមួយកម្មវិធី C
មានកំលាំង ប្រហាក់ប្រហែលគ្នាក្នុងការសរសេរវិវត្តន៍ UNIX ។ ប្រសិនបើបាន
ស្គាល់ C, C++ ឬ Java អ្នកអាចរៀន C# បានយ៉ាងងាយបំផុត ។ ក្នុងផ្នែកទីI អ្នកនឹងបានឃើញពីការណែនាំអំពីមុខងារមូលដ្ឋានរបស់ C# ដែលមានប្រើអថេរ និងរបៀបប្រើប្រាស់គណិតវិទ្យាដូចជា : +, -…​របៀបប្រើ កន្សោមដូចជា if កន្សោម loop ដូចជា while អ្នកនឹងស្គាល់ពីរបៀបសរសេរ សមីការនិងរបៀបប្តូរ Parameter អោយវា ។ ចុងក្រោយបំផុត C# ប្រើប្រាស់ជាមួយ (Exceptions) ។ របៀបអាច C# គឺអានថា C Sharp ។

បង្កើត Project ថ្មី

កាលណាអ្នកចាប់ផ្តើមដំបូង Visual Studio .NET អ្នកនឹងឃើញ Visual Studio 2005 ទំព័រចាប់ផ្តើម Start Page tab ក្នុង IDE ។ អ្នកអាចបើក projects ដែលបានបង្កើតឡើវិញឬបង្កើត project ថ្មីពី Start page (មើលរូចខាងក្រោម) ។ ដើម្បីចូលក្នុង tour អោយបានឆាប់រហ័ស ។ អ្នកកំពុង បង្កើតដើម្បីបង្កើត Windows application ថ្មីត្រូវចុចលើប៉ូតុង New Project ខាងក្រោយឆ្វេងដៃដើម្បីមើលប្រអប់ New Project dialog box ដែលបង្ហាញ ក្នុងរូបខាងក្រោម ។ រូប 1.1 អ្នកអាចបើក project ដែលមានរួច បង្កើត projects ថ្មីពី Visual Studio Start page ។

a

ប្រអប់ Project dialog box ថ្មីគឺត្រូវបានប្រើដើម្បីប្រាប់លក្ខណ: ប្រភេទនៃ Visual C# project ដើម្បីបង្កើត ។ (អ្នកអាចបង្កើតប្រភេទជាច្រើន នៃ projects ជាមួយ Visual C# បានប្រសើរជាមួយផ្គត់ផ្គង់ languages នៃ សណ្ឋាន.NET ដូចគ្នា) ប្រសិនបើ Visual C# Projects folder មិនបានជ្រើស

រើសចុចលើដើម្បី display មើលប្រភេទ Visual C# project types និងខណះ ពេលបង្កើត Windows Application icon ត្រូវបានជ្រើសរើស ។ នៅខាង

ក្រោមនៃ New Project dialog box ថ្មីគឺជាឈ្មោះ Name text box ។ ទីតាំង ដែល text box ស្ថិតនៅត្រូវបានប្រើប្រាស់ folder ជាទូទៅក្នុងពេលដែល

បង្កើត project ។ Visual C# .NET បង្កើត project ថ្មីបំពេញបន្ថែមជាមួយ  ដើម្បីចាប់ផ្តើមសង់ interface សំរាប់ការប្រើប្រាស់ application (មើលរូប 1.3) ខាងក្នុង Visual Studio .NET  form គឺជាការកំណត់ពេល design-time  ។
a

1.   រៀនសរសេរក្នុង Visual Studio.NET

Visual Studio.NET គឺជាកម្មវិធីសរសេរ Code ដែលផ្គត់ផ្គង់ឧបករណ៍

Tools ច្រើនបំផុតដែលចាំបាច់សំរាប់ការសាងសង់ Project ធំឬតូច(អ្នកអាច

សង់បណ្តា Projects ធ្វើការផ្គុំគ្នាបណ្តា module របស់កម្មវិធីផ្សេងទៀតខុសៗ គ្នា) ។ ឧទាហរណ៍ខាងក្រោមនេះនឹងណែនាំអ្នកអំពីរបៀបចាប់ផ្តើម Visual Studio.NET នឹងចាប់ផ្តើមសរសេរកម្មវិធីប្រើប្រាស់ Command Line ដំបូងជា មួយ C# ។

បង្កើតកម្មវិធីប្រើប្រាស់ដោយប្រើ Command ក្នុង Visual Studio.NET 2005

  1. ក្នុង Microsoft Windows ចុចលើ Startà Programsàចូលក្នុង  Microsoft Studio.NET 2005 ។
  2. ចុចជ្រើសរើស Microsoft Studio.NET 2005
  3. ពីក្នុង Menu bar ចូលក្នុង File ចូលក្នុង New ក្រោយមកចុចលើ ជ្រើសរើស Project ។

ក្នុងប្រអប់ New Project ថ្មីបានបើកចេញ ប្រអប់នេះអនុញ្ញាតអោយ

អ្នកបង្កើត Project ថ្មីពី Project គំរូជាច្រើន (Template) ខុសគ្នាដូចជា: Windows Applications, Class Library និង Console Application វា

បញ្ជាក់ពីប្រភេទប្រើប្រាស់ដែលអ្នកចង់បង្កើត ។
a

  1. ក្នុងតារាង Project Types ចុចលើជ្រើសរើស Visual C# Projects ។
  2. ក្នុងតារាង Templates ចុចជ្រើសរើសក្នុង icon Console Application (អ្នកអាចទាញតារាងក្នុង Templates ដើម្បីមើលក្នុង icon នេះ) ។
  3. ក្នុង Location បញ្ចូល Path ដូចខាងក្រោមនេះ:

D:\EditBOOK\CorrectBOOKEdit\Visual C# Step by Step\Code-CD\Chapter 1

  1. ក្នុងឈ្មោះ Name បញ្ចូលក្នុង TextHello ។
  2. ចុងបញ្ចប់ចុចលើ OK ។

ក្នុង menu bar អនុញ្ញាតអោយអ្នកចូលដល់ Command ដែលអ្នកនឹង

ប្រើប្រាស់ក្នុងការសរសេរ Code ។ អ្នកអាចប្រើ keyboard ដើម្បីបញ្ជូន cursor របស់ mouse ដើម្បីសរសេរបណ្តា Command នេះ។ Toolbar ស្ថិតនៅខាង ក្រោមនៃ menubar ដែលមាន menu ជាច្រើនសំរាប់ផ្គត់ផ្គង់ ។ ក្នុងប្រអប់ Solution Explorer ដែលមានលេចឡើង list ឈ្មោះបណ្តា files ប្រភពដើម របស់ Project អ្នកអាចចុចពីរដងលើ mouse នៃឈ្មោះ files ។ ក្នុងប្រអប់ output pane លេចឡើង ដែលរួមមានប្រាប់ពីកំហុស error នៅពេលដែល build ។ ខាងក្រោមនេះការបើ Project ថ្មីមួយ Project គឺមានឈ្មោះថា TextHello ដែលអ្នកទើបតែបង្កើតក្នុង Visual Studio.NET ក្នុងរូប 1.3 ។
a

មុនពេលសរសេរ code អ្នកត្រូវត្រួតពិនិត្យមើល file ក្នុងប្រអប់ Solution Explorer វាបានបង្កើតចេញដោយ Visual Studio.NET ពេលដែល អ្នកបង្កើត Project ។

TextHello.sln គឺជា file ដោះស្រាយ (Solution file) ផ្តល់មកជា មួយ គ្រប់ការប្រើប្រាស់ដែល file ប្រភេទនេះ ។ គ្រប់ file ដំណោះ ស្រាយរួមមានមួយឬច្រើន file ក្នុង Project គ្រប់ Solution file មាន សមាសភាពជាច្រើនគឺជា .sln ជាមួយឈ្មោះសមាសភាពដែលលេច ចេញក្នុង Solution Explorer ងាយស្រួលអានបំផុតដូចជាក្នុង Project នេះគឺ “TextHello” ។

TextHello.csprj គឺជា Project file របស់ C# ដែល file របស់ Project នីមួយៗរួមមានមួយឬច្រើន file ប្រភពដើម បណ្តា file ប្រភព

ដើមក្នុង Project មួយត្រូវតែសរសេរព្រមជា មួយ Programming language ។ ប្រភេទ file នេះលេចឡើងក្នុង Solution Explorer គឺគ្រាន់តែប្រើប្រាស់ឈ្មោះរបស់ Project ទោះបីយ៉ាងណាក៍ដោយវា

ត្រូវបានរក្សាទុកក្នុងប្រព័ន្ធ File ជាមួយសមាសភាពពង្រើកគឺជា .csproj

Class1.cs  គឺជា file ប្រភពមួយដែលមានប្រភពខុសគ្នារបស់ C# អ្នក សរសេរ code ក្នុង file នេះ Visual Studio.NET ក៏ចាប់ផ្តើមផ្គត់ផ្គង់ ដោយ command code អោយ file នេះ ។

AssemblyInfo.cs គឺជា file ប្រភពខុសគ្នារបស់ C# អ្នកអាចប្រើ file នេះដើម្បីបំពេញបន្ថែមចូលក្នុងកម្មវិធី ដូចជាឈ្មោះ editor ថ្ងៃបង្កើត កម្មវិធី និងមានមុខងារជាច្រើនទៀតដើម្បី update បន្ថែមលើ អាច អនុញ្ញាតអោយអ្នកផ្លាស់ប្តូរកម្មវិធីរត់ ។

App.ico គឺជា file icon បានបញ្ចូលក្នុងកម្មវិធី ។ គ្រប់ការប្រើប្រាស់ ទាំងអស់ក្នុង Windows មាន interface សំរាប់ប្រើសុទ្ធតែមាន icon ដែលវាលេចឡើងក្នុង taskbar ពេលរត់កម្មវិធី ។ប្រសិនបើអ្នកប្រើ Windows Explorer ដើម្បីចូលក្នុD:\EditBOOK\CorrectBOOKEdit

\Visual C# Step by Step\Code-CD\Chapter 1 ក្នុង directory ដែលអ្នកបង្កើតចេញ Project លើ អ្នកនឹងឃើញ directoryTextHello ក្នុង Directory នេះ មាន file ទាំងអស់ដែលលេចចេញក្នុងប្រអប់ Solution Explorer ។

1.   សរសេរកម្មវិធីដំបូងរបស់អ្នក

ក្នុង File Class1.cs ផ្តល់និយមន័យៗក្នុង class មួយដែលផ្ទុកកន្សោម

Main ។ បណ្តាកន្សោមទាំងអស់ត្រូវតែមាននិយមន័យក្នុង Class នីមួយៗ ។ កន្សោម Main គឺជាកន្សោមមួយដែលមានលក្ខណ:ពិសេស វាជាចំណុចសំខាន់ របស់កម្មវិធី ។ C# គឺជាកម្មវិធី Programming មានលក្ខណ:ពិសេសរបៀប សរសេរអក្ស ហើយលោកអ្នកត្រូវសរសេរ Main ជាមួយអក្សធំ M ។

សរសេរ code ប្រើប្រាស់បច្ចេកទេស IntelliSense

  1. លប់ TODO (បណ្តាបន្ទាត់ចាប់ផ្តើមជាមួយ //) ក្នុងកន្សោម Main ក្នុង Class1.cs ។

Main ដូចខាងក្រោមនេះ:

static void Main(string[] args)

{

}

  1. បញ្ចូល Console ក្នុងកន្សោម Main

static void Main(string[] args)

{

Console

}

ចំណាំ: នៅពេល list Intellisense បានលេចឡើង អ្នកអាចចុច W ដើម្បីជ្រើសរើសដំបូងក្នុង Console ដែលចាប់ផ្តើមដោយអក្ស W ។

  1. វាយសរសេរសញ្ញាចុច(.) បញ្ចូលក្នុង Console ។

មាន list Intellisense លេចចេញ ។ list នេះមានផ្ទុកកន្សោមទាំង
អស់ក្នុងករណី Class Console ។

  1. បន្ទាប់មកប្រើ Keyboard បញ្ជូនចុះក្រោមមកដល់ WriteLine

ជ្រើសរើសវារួចហើយប្រើ key ចុចលើ enter ។ អ្នកក៏អាចប្រើ mouse ដើម្បីប្រមូល ​list រួចចុចលើ double click លើ mouse លើ WriteLine ដើម្បីជ្រើសរើសវា ។

static void Main(string[] args)

{

Console.WriteLine

}

  1. សរសេរចូលសញ្ញា (

បន្ទាត់ Intellisense លេចឡើងដែលមានកន្សោម Parameter នៃ WriteLine ។ តាមពិត WriteLine គឺជាកន្សោមមួយដែលបញ្ចូល Overloaded មានន័យថា Console ផ្ទុកច្រើនកន្សោមព្រមជាមួយ ឈ្មោះកន្សោម WriteLine (បណ្តាកន្សោម Overloaded បានបញ្ជាក់ ក្នុងជំពូកទី3) ។

static void Main(string[] args)

{

Console.WriteLine(

}

  1. សរសេរបញ្ចូលសញ្ញា ) និងសញ្ញា ;

static void Main(string[] args)

{

Console.WriteLine();

}

  1. សរសេរ text “Hello World” ក្នុងសញ្ញា ()

static void Main(string[] args)

{

Console.WriteLine(“Hello World”);

}

បណ្តា Icons របស់ IntelliSense

IntelliSense ដែលលេចឡើងមានឈ្មោះនៃគ្រប់សមាជិកនៃ class ។ សំរាប់ចាកចេញពីឈ្មោះសមាជិកនីមួយៗគឺជា icon ដែលពណ៌នាប្រភេទនៃ សមាជិក។ icons និងបណ្តាប្រភេទរបស់វារួមមានដូចខាងក្រោមនេះ:

Icon                                មានន័យ

C# keyword

method

Properties

class

struct

enum

interface

delegate

namespace

បង្កើត (Build) និងរត់ប្រើប្រាស់  Command  ដែលអ្នកទើបនឹងសរសេរ

  1. ជ្រើសរើស Build នៅលើ Menubar រួចចុចលើ Build

ក្រោយពេលបង្កើតរួចជោគជ័យហើយ និងមានលេចឡើងក្នុងប្រអប់ Output pane ដូចខាងក្រោមនេះ:

Build: 1 succeeded, 0 failed, 0 skipped
a

  1. ជ្រើសរើស Debug នៅលើ menubar ចុចជ្រើសរើស Start Without Debugging កម្មវិធីនឹងរត់ក្នុងប្រអប់ (Command Window) ដែល Print ចេញបន្ទាត់ Hello World នៅលើ

អេក្រង់ដែលលេចចេញ ។
aចំណាំ: ត្រូវជ្រើសរើសចុចលើអោយត្រូវ Start Without Debugging គឺមិន

មែន Start ព្រោះ Start សំរាប់ប្រើជាមួយកម្មវិធី Shell (Command Shell) តែ វាមិនឈប់អោយមើលលទ្ធផលឡើងវិញពេលដែលយើងរត់កម្មវិធី ។

  1. បញ្ចូលលើអេក្រង់ដែលមានលទ្ធផល រួចចុចលើ key ណាមួយ

ដើម្បីបិទវាឡើងវិញ អ្នកនឹងត្រលប់មកសរសេរ code Visual Studio.NET ។

  1. ក្នុង Solution Explorer ចុចជ្រើសរើស icon Show All Files ។

បណ្តា bin និង obj លេចឡើងលើបណ្តា file ប្រភពដើមរបស់ C#

ប៉ុន្តែ Directory នេះសមមូលនឹងបណ្តា Directory bin និង obj ក្នុង Directory របស់ Project ។ វាបានបង្កើតចេញពេលដែលអ្នកបង្កើតក​ម្មវិធីប្រើ ប្រាស់ហើយវាផ្ទុក file អនុវត្តរបស់កម្មវិធីជាមួយបណ្តា file ផ្សេងទៀត។

  1. ក្នុង Solution Explorer ចុចជ្រើសរើសលើសញ្ញា + ខាងស្តាំដៃ

របស់ bin ។ ក្នុង Directory Debug វានឹងលេចចេញ ។

  1. ក្នុង Solution Explorer ចុចជ្រើសរើសលើ + ខាងឆ្វេងដៃនៃ​ Debug ។
    អ្នកនឹងឃើញ 2 Directory TextHello.exe និង TextHello.pdb និង
    2 files នេះស្ថិតក្នុង Directory bin\Debug ។

aរត់កម្មវិធីពី Command Line

ខាងលើបានណែនាំពីរបៀបសរសេរ និងរត់កម្មវិធីក្នុង Visual Studio.NET ។ ផ្នែកនេះនឹងណែនាំអ្នកពីរបៀបរត់កម្មវិធីពី Command ដោយ ប្រើ Command csc របស់ C# ។

  1. បើកប្រអប់ Command (រត់ MS-DOS) ក្រោយមកចូលដល់

Directory C:\Program Files\Microsoft Visual Studio.NET

\FrameworkSDK\bin ។

  1. រត់ file corvars.bat ដើម្បីផ្លាស់ប្តូរអថេរ PATH, LIB, INCLUDE បន្ថែមបណ្តា Directory ដែលផ្ទុកបណ្តា Libraray របស់ .NET និងបណ្តាសមាសភាពដែលចាំបាច់ក្នុងពេលដែលរត់កម្មវិធីពី Command ។
  2. ឥឡូវនេះអ្នកអាចចាប់ផ្តើមរត់កម្មវិធីដែលអ្នកបានបង្កើត Visual Studio.NET នៅផ្នែកខាងលើ។ ចូលប្តូរ Directory ដែលផ្ទុក Project TextHello :

D:\EditBOOK\CorrectBOOKEdit\Visual C# Step by Step\Code-CD\Chapter 1\TextHello

បញ្ចូល Command ដូចខាងក្រោមនេះ:

Csc/out:Greeting.exe AssemblyIno.cs Class1.cs

រួចចុចលើ Enter ក្នុងដំណើរការនេះបង្កើត file Greeting.exe ពី 2file ប្រភពរបស់ C# ។ ប្រសិនបើអ្នកមិនបានប្រើប្រាស់ជ្រើសរើស /out នោះការ បង្កើតចេញនិងមានឈ្មោះ គឺជាឈ្មោះ file ប្រភពដើមដំបូង ។ ក្នុងករណីនេះវា នឹងមានឈ្មោះគឺជា AssemblyInfo.exe ។
a1.   ប្រាស់ Namespace

ចូរមើលការប្រៀបធៀបខាងក្រោមនេះ អ្នកឃើញចំណុចអ្វីរវាងកម្មវិធី

ដែលមានខ្នាតតូចឬយ៉ាងណា?មានបញ្ហាពីរយ៉ាងដែលកើតចេញគឺ: ទីមួយ Code កម្មវិធីកាន់តែច្រើនកាន់តែពិបាកយល់ ។ ទីពីរ Code កាន់តែច្រើននោះ មានន័យថា​គឺមានអនុគមន៍ក៏កាន់តែច្រើនដែរ មានឈ្មោះ Class ច្រើន…ពេល បរិមាណឈ្មោះកើនឡើងដល់កំរិតណាមួយនោះការបង្កើតដំឡើង Project នឹង

បរាជ័យ ។

ចំណាំ: នេះគឺជារបៀបដើម្បីបើកប្រអប់ Command ពី Directory ណា មួយក្នុង Windows Explorer ។ ពីក្នុង Menu Tools ចុចជ្រើសរើស Folder Options ពេលប្រអប់ Folder Options លេចចេញ ។ ចុចលើ file Types ។ កំណត់ និងជ្រើសរើសរបៀប Folder ក្នុង List Registered File Types (ជួរ File) រួចចុចលើ Advanced ។ ប្រអប់ Edit File Type បើកចេញ ចុចជ្រើស

រើស New ប្រអប់ថ្មីមួយផ្សេង New Action នៅតែលេចចេញ ។ ក្នុង Action វាយសរសេរចូល C:\WinNT\System32\CMD.exe (ចាំថា ឈ្មោះ Drive ដែលអ្នកដំឡើង Win2000 ក្នុងករណីនេះគឺជា Drive C) ។ ចុចលើ OK ដើម្បី

បិទប្រអប់ New Action បន្ទាប់មកទៀតចុចលើ OK ដើម្បីបិទប្រអប់ Edit File Type ចុចលើ OK ម្តងទៀតដើម្បីបិទប្រអប់ Folder Options ។ ឥឡូវនៅក្នុង Windows Explorer ចុចលើ mouse ខាងស្តាំដៃលើ Directory ណាមួយ អ្នកនឹងឃើញ Command នៅលើ pop-up menu ។ ចុចជ្រើសរើស Command ប្រអប់បន្ទាត់ និងបានបើកចេញជាមួយ Directory ដែលអ្នកជ្រើស រើសក្នុង Windows Explorer ។

ឧទាហរណ៍ បង្កើតចេញ Class មួយដែលមានឈ្មោះ TextHelloGreeting អ្នកអាចបង្កើត Class មួយមានឈ្មោះ Greeting ក្នុង Namespace ឈ្មោះ TextHello ដូចខាងក្រោមនេះ:

namespace TextHello

{

class Greeting

{

}

}

ពេលនោះអ្នកនឹងពិគ្រោះដល់ Class Greeting ដូចជា TextHello.Greeting ប្រសិនបើមាន នរណាម្នាក់បង្កើត Class Greeting ក្នុង Namespace ហើយក្រោយមកដំឡើងវាចូលក្នុងកុំព្យូទ័ររបស់អ្នកការប្រើប្រាស់ របស់អ្នកនៅតែដំណើរការតាមធម្មតា ។

.NET Framework SDK ដែលគ្រប់ Class នីមួយៗក្នុងប្រអប់ .NET សុទ្ធតែជារបស់ namespace ។ ឧទាហរណ៍ Class Console ជារបស់ namespace System មានន័យថាឈ្មោះមានគ្រប់សព្វគឺជា System.Console ។

តែសប្រើសាកល្បង

1. ក្នុងប្រអប់ text ប្រយ័ត្នពេលប្រើ using នៅផ្នែកខាងលើ file Class1.cs

//using System;

  1. ពី menubar Build ចុចជ្រើសរើស Build។

ការបង្កើត Build មិនជោគជ័យ ក្នុងប្រអប់ដែលលេចចេញលទ្ធផល

មានលេចឡើងបន្ទាត់ដូចជា:

the type or namespace ‘console’ could not be found:(are you missing a using directive or an assembly reference?)

  1. ក្នុងប្រអប់ដែលបានសរសេរ text អាចកែប្តូរបាន ក្នុង Main ការប្រើ ប្រាស់ផ្នែកឈ្មោះគ្រប់គ្រាន់:

static void Main(string[] args)

{

Console.WriteLine(“Hello World”);

}

4. ចុចលើសញ្ញា . (សញ្ញាចុច) ចូលក្នុងអក្សរ Console ។

ក្នុង list Intellisense លេចឡើង ក្នុង list នេះមានផ្ទុកកន្សោមទាំង

អស់ ដែលមាននៅក្នុង Class Console ។ ក្នុង list Intellisense ដែលមាន កន្សោម .WriteLine បានបន្ថែមលើ files ប្រភពដូចខាងក្រោម:

static void Main(string[] args)

{

Console.WriteLine

}

  1. សរសេរសញ្ញាបើកឬ (

មានបន្ទាត់ Intellisense ដែលលេចចេញ វាមាន Parameter របស់

កន្សោម WriteLine ។ តាមធម្មតា WriteLine គឺជាកន្សោម Overloaded មាន ន័យថា Cosole ផ្ទុកកន្សោមជាច្រើនព្រមជាមួយឈ្មោះ WriteLine (បណ្តា Overloaded) មានពន្យល់ក្នុងជំពូកទី3 ។

static void Main(string[] args)

{

Console.WriteLine(“Hello World”);

}

  1. ពី menubar Build ចុចលើ Build ។

ការបង្កើតបានជោគជ័យ ប្រសិនបើមិនបានត្រួតពិនិត្យឡើងវិញ

មើលក្នុង Main ។

  1. ក្នុងប្រអប់ Solution Explorer បញ្ចូលលើសញ្ញា + ខាងឆ្វេងដៃនៃ References ។

វាលេចឡើងសំណុំបណ្តា file ដោយ​ Solution Explorer (វាអាចកើត

មានឡើង error ពេលដែលរត់កម្មវិធី) ។

4.   បង្កើតឯកសារប្រើ XML

ក្នុង .NET នឹងដោះស្រាយពីបញ្ហានេះដោយប្រើរបៀបមានលក្ខណ:

ពិសេសដែលមាននៅក្នុង XML ប៉ុន្តែអ្នកអាចប្រើផ្ទាល់ចូលក្នុង Code ដើម ។ .NET ក៏អាច​ផ្គត់ផ្គង់ជ្រើសរើសពី Command (/doc:) ដើម្បីជ្រើសរើសឯកសារ

Code ដើម ក្នុងទំរង់ XML ដែលមានផ្ទាល់ពី file ប្រភពដើម ។ ឧទាហរណ៍ ខាង

ក្រោមណែនាំអ្នកពីរៀបបង្កើតដែលមានទំរង់ជា HTML អាចភ្ជាប់បណ្តា XML ពី Code ប្រភពដើម ។

   បន្ថែមទំរង់ XML ចូលក្នុង Code ប្រភពដើម

  1. ពីក្នុង Menubar View ចុចជ្រើសរើស Class View

Class View ស្ថិតនៅខាងក្រោមប្រអប់ Solution Explorer ។

  1. ចុចជ្រើសរើស Class View

ប្រអប់ Solution Explorer លេចឡើង Class View.

  1. ក្នុងប្រអប់ Class View ចុចចូលក្នុងសញ្ញា + ខាងស្តាំដៃរបស់ Project TextHello ដើម្បីមើល namespace TextHello ។ បន្ទាប់មកទៀត ចុចចូលសញ្ញា + ខាងឆ្វេងដៃ namespace TextHello ដើម្បីមើល Class1 ។ ចុច mouse ខាងស្តាំដៃលើ Class1 ។

Pop-up menu លេចចេញ
a

XML

XML មានសំរាប់ប្រើប្រាស់

<summary> សង្ខេបខ្លីងាយស្រួលជាកន្សោម

<remarks> ពត៌មានពិស្តារ វាមានផ្ទុកទំរង់ <para> និង <list> ដូចជា <cref> ដើម្បីបង្កើត hyperlink ។

<Value> អធិប្បាយពីលក្ខណ:សម្បត្តិ

<exception> បញ្ចូលកន្សោមនិងលក្ខណ:សម្បត្តិ

<param> បណ្តាកន្សោម Parameter

  1. ពី menubar ចូលជ្រើសរើស Properties

ប្រអប់ Properties លេចឡើង វាលេចចេញ Properties របស់ Class

  1. ចុច double-Click លើ Properties name ។ Properties name និងតំលៃរបស់វាត្រូវបានជ្រើសរើស ។
  2. បញ្ចូល Greeting រួចចុច enter ។

ក្នុងប្រអប់សរសេរ code ឈ្មោះរបស់ថ្នាក់ប្តូរ Greeting ។ ប្រយ័ត្ន

ឈ្មោះនេះក៏អាចផ្លាស់ប្តូរក្នុង Types នៅខាងឆ្វេងដៃនៃប្រអប់ text  សរសេរ code ។
a

  1. ក្នុងប្រអប់ដែលសរសេរ code ប្តូររវាង <summary> ក្នុង class “ The obligatory Hello World in C#” ។
  2. ក្នុងប្រអប់ដែលសរសេរ​ code បន្ថែម <remarks> ចូលក្នុង <summary>:

/// <summary>

/// The obligatory Hello World in C#

/// </summary>

/// <remarks>

/// This program writes out Hello World

/// using the WriteLine method of the

/// System.Console class.
a

  1. ក្នុងប្រអប់ Solution Explorer ជ្រើសរើស Class1.cs ក្រោមមក

ចុចជ្រើសរើសលើ Properties លេចឡើង ។

  1. ក្នុងប្រអប់ Properties នេះផ្លាស់ប្តូរ text ដែលសរសេរ code ក៏

អាចផ្លាស់ប្តូរពី Class1.cs ទៅ Greeting.cs ។ ប្រសិនបើអ្នកបើក Windows Explorer ដល់ directory TextHello អ្នកនឹងឃើញឈ្មោះ file ដែលបានប្តូរ ។

  1. បិទប្រអប់ Properties ឡើងវិញ ។

ទោះបី ប្រអប់ Properties និងប្រអប់ Solution Explorer ដែលស្ថិត

ជិតគ្នា ។ អ្នកអាចដាក់កន្លែងណាមួយងាយស្រួលវិវត្តន៍និងផ្លាស់ប្តូរទំហំរបស់វា

ពេលអ្នក ចង់បើកទាំងពីរព្រមគ្នាក្នុងពេលតែមួយ ។

  1. ពីក្នុង menu Tools ចុចជ្រើសរើស Build Comment Wed Pages

ប្រអប់ Build Comment Web Pages បើកចេញក្នុងរូប 1.10
a

  1. ចុចលើ OK លើប្រអប់នេះ

Visual Studio.NET វិភាគ file ប្រភពដើម ដែលកត់ចំណាំក្នុង XML

បង្កើតឯកសារ HTML មានទំរង់ជាប់ជាមួយទំរង់ XML ហើយបន្ទាប់មកវាលេច ចេញ file HTML ក្នុងប្រអប់ text សរសេរ code ។ រូប 1.11 មើល file HTML ក្រោយពីអនុវត្ត Command Build Comment Web Pages ។
a

  1. ចុចលើ Show All files ក្នុងប្រអប់ Solution Explorer ។

អ្នកនឹងឃើញមាន Directory ថ្មីមួយមានឈ្មោះ CodeCommentReport ក្នុងនោះ ក្នុងករណីនេះសមមូលជាមួយ CodeCommentReport ផ្ទុកបណ្តា file HTML បានបង្កើតចេញពី Command Build Comment Web Pages ដែលអ្នក

ត្រូវការរត់នៅលើវា ។

  1. ក្នុងប្រអប់ Solution Explorer ចុចលើ TextHello ។

អ្នកនឹថឃើញ file មួយចំនួននិង Subdirectory TextHello
16. បន្ទាប់មកទៀតជ្រើសរើសលើសញ្ញា + ខាងឆ្វេងដៃ TextHello ខាងក្រោម CodeCommentReport ។

2.   បង្កើតប្រើប្រាស់ Windows Form ការសរសេរ code Visual Studio.NET មាន Tools គ្រប់គ្រាន់ចាំបាច់ ដើម្បីបង្កើតប្រើប្រាស់ក្នុង Windows ។ អ្នកនឹងរៀនពីរបៀបបង្កើត Interface សំរាប់អ្នកប្រើប្រាស់ជាមួយ Windows អ្នកអាចប្រើ Visual Designer ។ Visual Studio.NET កើតចេញពី Command ដើម្បីអនុវត្ត Interface សំរាប់ អ្នកប្រើប្រាស់ Design ។ មានន័យថាមានពីរបៀបប្រើប្រាស់: មើល Interface ប្រើប្រាស់ (Design View) និងមើល Code ប្រើប្រាស់ (Code View) ។ អ្នក

អាចផ្លាស់ប្តូរឡើងវិញក្នុងពេលបង្កើតសរសេរ ។

បង្កើតកម្មវិធីប្រើប្រាស់ Windows ក្នុង Visual Studio.NET

  1. ពី menubar លើ file ចូលក្នុង New រួចចុចជ្រើសរើសលើ Project

ប្រអប់ New Project បានលេចឡើង

  1. ក្នុងប្រអប់ Project Types ចុចលើ Visual C# Procjects ។
  2. ក្នុងប្រអប់ Templates ចុចជ្រើសរើស Windows Application ។

ក្នុង Location ចុចចូល :

D:\EditBOOK\CorrectBOOKEdit\Visual C# Step by Step\Code-CD\Chapter 1

  1. ក្នុងប្រអប់ Name ចូល WinFormHello
  2. ចុចលើ OK

Visual Studio.NET បង្កើតចេញនិងលេចឡើង Windows Form ក្នុង

Design View ។ រូប 1.12 អោយឃើញអេក្រង់ Visual Studio.NET ពេលអ្នក បង្កើត Project ថ្មីមួយប្រើប្រាស់ Windows ។
a

បន្ទាប់មកទៀតអ្នកជ្រើសរើសប្រើ Visual Design ដើម្បីបន្ថែមចូល Windows Form នេះមាន 3 Control និងត្រួតពិនិត្យ code ដើម្បីបង្កើតចេញ

ដោយ automatic ពី Visual Studio.NET ដើម្បីអនុវត្ត Control នេះ:

បង្កើត Interface សំរាប់អ្នកប្រើ

  1. ចុចនៅលើ Toolbox

មានប្រអប់មួយផ្ទុកឧបករណ៍ Toolbox លេចចេញ

  1. ចុចលើ Label ក្នុងប្រអប់នេះរួចចុចជ្រើសរើសចូលខាឆ្វេងដៃលើ Windows Form ។

Control Label មួយអាចបន្ថែមចូល Form

  1. សមមូលអ្នកជ្រើសរើស Textbox បានបន្ថែម រួចចុចលើ Form ខាង ក្រោម Control Label ។

Control Textbo បានបន្ថែមចូល Form

  1. ការអនុវត្តន៏លើប៊ូតុង Control Button របៀបធ្វើដោយចុចលើ

ដាក់វាខាងស្តាំដៃរបស់ Control TextBox មើលរូប 1.13 ខាង

ក្រោមនេះ:
a

  1. ចុចជ្រើសរើស Solution Explore លើ Toolbox ប្រអប់ Solution Explore លេចឡើង។
  2. ក្នុង Solution Explore ចុចជ្រើសរើសលើ View Code។

អ្នកនឹងឃើញមាតិកា file ប្រភពដើមក្នុងប្រអប់ ។ ពេលនេះអ្នកមាន 2

សន្លឹកមានឈ្មោះ Form1.cs[Design]* (Design View) និង Form1.cs* (Code View) អ្នកអាចជ្រើសរើសលើផ្នែកឈ្មោះ [Design] ដើម្បីត្រឡប់មក Design View ពេលណាមួយនិងច្រាស់មកវិញ ។

Form1.cs មានផ្ទុក Code ទាំងអស់ដែលបង្កើតដោយ Visual Studio.NET ដែលរួមមានដូចខាងក្រោមនេះ:

ò Using Visual Studio.NET បានផ្តល់ using ចូលផ្នែកដំបូងក្នុង file

ប្រភពដើម ។

ò namespace : Visual Studio.NET បានប្រើឈ្មោះ Project ធ្វើ namespace  នៅខាងក្រៅ:

namespace WinFormHello

{

:

}

ò ស្រទាប់ Visual Studio.NET បានបង្កើតស្រទាប់ Form1 ក្នុង namespace WinformHello

namespace WinFormHello

{

public class Form1 ..

{

:

}

}

ស្រទាប់នេះអនុវត្ត form អ្នកបានបង្កើតចេញក្នុង Design View

(មេរៀនស្រទាប់មានក្នុងជំពូកទី5)

ò 3 field Visual Studio.NET បន្ថែម 3 field ចូលស្រទាប់ form1

private void InitializeComponent()

{

this.label1 = new System.Windows.Forms.Label();

this.userName = new System.Windows.Forms.TextBox();

this.ok = new System.Windows.Forms.Button();

this.label1.Text = “Enter your name”;

this.userName.Text = “here”;

this.ok.Text = “OK”;


a

IT ads

មេរៀនទី២: អថេរ និងកន្សោម

មេរៀនទី២: អថេរ និងកន្សោម

1. ប្រើ Visual Studio .NET ពេលចាប់ផ្តើមបើកទំព័រ

ដោយប្រើ default ជាមួយ Visual Studio ចាប់ផ្តើមទំព័របង្ហាញក្នុងរូប

រូប 2.1 កាលណាអ្នកចាប់ផ្តើម Visual C# .NET (ប្រសិនបើ Visual C# មិនរត់ ត្រូវចាប់ផ្តើមឥឡូវនេះ)។ ទំព័រ Visual Studio ចាប់ផ្តើមពីទំព័រនេះអ្នកអាចបើក edited projects បង្កើត projects ថ្មីមួយនិង edit user profile របស់អ្នក។
a

ពីក្នុងទំព័រនេះ អ្នកអាចមាន Visual Studio .NET បង្ហាញបើកប្រអប់ Open Project dialog box បង្ហាញប្រអប់ Project dialog box ថ្មីឬបង្ហាញ ឬ design environment ទទេរ ។ ដើម្បីមើល view ឬ edit ក្នុងពេល startup options ជ្រើសរើស Tools ក្នុង Options មើលក្នុងប្រអប់ Options dialog box ក្នុងរូប 2.2 ។ រូប 2.2. ប្រើ At Startup setting ដើម្បីត្រួតពិនិត្យបញ្ហា

ដំបូងដែលអ្នកបានឃើញកាលណាVisual Studio .NET ចាប់ផ្តើម ។
a

2. បង្កើត Project ថ្មី

ដើម្បីបង្កើត project ថ្មីចុចលើប៊ូតុង New Project នៅខាងក្រោយ ឆ្វេងដៃនៃទំព័រចាប់ផ្តើមនៃ Visual Studio .NET ។ ពេលមើលប្រអប់ Project ថ្មី dialog box ដែលបង្ហាញក្នុងរូប 2.3 ប្រភេទ Project list ប្រែប្រួលពី ម៉ាស៊ីនមួយទៅម៉ាស៊ីនមួយទៀត ។ ដោយឈរលើឆ្នាំផលិតរបស់ Visual Studio .NET ដែលត្រូវបានដំឡើង ។ រូប 2.3 ប្រើប្រអប់ Project dialog box ដើម្បីបង្កើតVisual C# .NET projects ។

a

ប្រើ Customizing ក្នុង Visual Studio .NET2005

Visual Studio .NET អនុញ្ញាតអ្នកចូល customize ដែលមាន interface elements ជាច្រើន ។ ដូចជាសន្លឹក windows និង toolbars ដែលអាចអោយអ្នកធ្វើការបានប្រសើរ ។ ដើម្បីបង្កើត Windows Application ថ្មីឥឡូវនេះអ្នកបើកក្នុង File menu ចុចលើ New​​ រួចជ្រើស Project ។ ក្នុង  project នេះនឹងប្រើដើម្បីបង្ហាញរៀបចំ design environment. ឈ្មោះ  project នេះ ។ (ក្នុងលំហាត់នេះមិនបង្កើតប្រើប្រាស់ឡើងវិញ ប៉ុន្តែវានឹងជួយ អ្នករៀន design environment ។ លើ screen របស់អ្នកនឹងមើលឃើញ ដូច

រូបបង្ហាញក្នុងរូប 2.4 ក្នុង default appearance នៃ IDE កាលណាអ្នកដំឡើង Visual Studio .NET ដំបូង ។|

aបង្ហាញ Hiding Toolbar

Visual Studio .NET រួមមានចំនួននៃ built-in toolbars អ្នកអាចប្រើ កាលណាបង្កើត project។ មានពីរ toolbar ដែលអាចសំដែងក្នុងរូបក្នុង

មេរៀននេះ ។  នៅខាងលើ Standard toolbar ដែលអ្នកចង់មើលគ្រប់ពេល។ ក្នុង toolbar ទីពីរគឺជា Layout toolbar ដែលផ្តលើ tools សំរាប់សង់ form។

Visual Studio មាន 5 toolbars; Visual Studio .NET។ toolbar ទាំងនេះ នឹងប្រើ Visual C# .NET developer គឺជាស្តងដារ Standard, Text Editor, និង Debug toolbar។ អ្នកនឹងរៀនរបៀបធ្វើក្នុងម៉ោងនេះ ។ ដើម្បីបង្ហាញ ឬ

hide toolbar ជ្រើសរើស View, Toolbar ដើម្បីមើល list នៃអថេរ toolbar  ក្នុង Toolbar ដែលកំពុងមើលដូចបង្ហាញក្នុងរូប 2.8 ចុចលើឈ្មោះ toolbar
a

Customizing Toolbar ដើម្បីចូល customize toolbar និង menu អ្នកប្រើក្នុងប្រអប់ Customize dialog box ដូចបង្ហាញក្នុងរូប 2.6 ដែលអនុញ្ញាត្តដោយជ្រើស

រើស View, Toolbar, Customize ។ រូប 2.6 បង្កើត toolbar ថ្មី ក្នុង customize ដែលមានរួចស្រេច ។
a

បង្កើត Toolbar ថ្មី  ឥឡូវនេះអ្នកកំពុងតែបន្តដើម្បីបង្កើត toolbar ថ្មីមួយដើម្បីទទួលពី របៀបធ្វើ toolbar customization ។ ក្នុង toolbar របស់អ្នកនិងផ្ទុកប៊ូតុង

ទោលដែលនឹងប្រើដើម្បីហៅជំនួយ Visual Studio ។ ដើម្បីបង្កើត toolbar ថ្មីដែលមានជំហានដូចខាងក្រោម:

  1. ពីក្នុង Toolbars tab នៃប្រអប់ Customize dialog box ចុចលើNew
  2. បញ្ចូល Enter My Help ដូចជាឈ្មោះនៃ toolbar របស់អ្នកកាលណា ត្រូវបានបង្ហាញ ។
  3. ចុចលើ OK ដើម្បីបង្កើត toolbar ថ្មី

បន្ទាប់មកអ្នកត្រូវបានបញ្ចូលឈ្មោះសំរាប់ toolbar របស់អ្នករួចចុចលើ OK ពេលនោះ toolbar ថ្មីរបស់អ្នកបានបង្ហាញចេញ ។ រូប 2.10 toolbars ថ្មី គឺជា pretty tiny; មិនមានប៊ូតុងលើវា​។  

aបន្ថែមប៊ូតុងទៅក្នុង  Toolbarz ឥឡូវនេះអ្នកមាន toolbar ទទេជំហានគឺបន្ថែមប៊ូតុង command ដែលអ្នកចង់ បានវា ។ ចុចលើ Commands នៃប្រអប់ Customize dialog box ដើម្បីមើល ថេរ commands ។ Commands tab ដែលមានផ្ទុកដូចខាងក្រោមនេះ:

  • list នៃប្រភេទ command
  • list នៃ commands សំរាប់ជ្រើសរើសប្រភេទ command

ប្រភេទ list បង្ហាញប្រភេទអថេរ command ទាំងអស់ដូចជា File និងមុខងារ Edit ។ កាលណាអ្នកជ្រើសរើសប្រភេទអថេរ commands សំរាប់ ប្រភេទនេះគឺបង្ហាញក្នុង list នៅខាងស្តាំដៃ ។ អ្នកបន្តដើម្បីបន្ថែម add ប៊ូតុង toolbar ដែលបង្ហាញជំនួយ Help icon ។ ដើម្បីបន្ថែមប៊ូតុង command លើ toolbar របស់អ្នកធ្វើដូចជំហានខាងក្រោមនេះ:

  1. ទីតាំងនិងជ្រើសរើសប្រភេទ category Help បណ្តាអថេរ commands ទាំងអស់សំរាប់ប្រភេទ Help category នឹងបង្ហាញក្នុង list ខាងស្តាំដៃ
  2. ពី Command list ចុចលើទាញ Contents command ដើម្បីចូល​ក្នុង custom toolbar របស់អ្នក ។ ដូចអ្នកបានទាញប្តូរចំណុច pointer ដើម្បីគូសចំណុចក្នុងប្រអប់តូចមួយពណ៌ប្រផេះ ។ នៅជ្រុង ខាងក្រោយស្តាំដៃនៃ pointer គឺជាប្រអប់ផតតូចមួយ។ ការបង្ហាញ នេះដែលមានទីតាំងនៅលើ pointer ។
  3. ដូចអ្នកទាញ command លើ toolbar របស់អ្នក (ឬ toolbar ផ្សេងទៀតដែលមានបញ្ហា) x ក្នុងប្រអប់តូចមួយនឹងប្តូរដើម្បីបន្ថែម

សញ្ញា (+) ដែលបង្ហាញក្នុង command អាចប្តូរក្នុងទីតាំងដែលកំពុង តាំងនៅបញ្ចូល point ដែលបង្ហាញលើ toolbar ដើម្បីបង្ហាញកន្លែង ប៊ូតុងនឹងបានផ្លាស់ប្តូរ command ។ រូប 2.7 cursor ត្រលប់ក្នុង I-beam កាលណាអ្នកអាច drop ប៊ូតុង ។
aបន្ថែម Control ដើម្បីប្រើ Form ក្នុង Toolbox

ក្នុងប្រអប់ toolbox គឺត្រូវបានប្តូរលើ form មួយ ។ ក្នុងប្រអប់ default toolbox អ្នកឃើញកាលណាអ្នកបើកដំបូងឬបង្កើត Visual C# .NET project គឺត្រូវបានបង្ហាញក្នុងរូប 2.9 ស្តង់ដារ standard toolbox ដែលផ្ទុក controls ជាច្រើនប្រើប្រាស់ដើម្បីសង់ user interfaces ។
aអ្នកអាចបន្ថែម add control មួយទៅក្នុង form ដែលមានបីមធ្យោបាយ:

  • ក្នុងប្រអប់ toolbox ចុចលើ tool ដែលបង្ហាញ control ដែលអ្នកចង់ បានដើម្បីប្តូរលើ form មួយរួចចុចលើ click រួចទាញលើ form កន្លែង អ្នកចង់បានបូរ control ។ ទីតាំងកន្លែងដែលអ្នកចាប់ផ្តើមទាញ គឺត្រូវ

បានប្រើនៅជ្រុងលើស្តាំដៃនៃ control និងចំណុច point នៅកន្លែង ដែលអ្នកបញ្ជូនចូលក្នុងប៊ូតុង mouse រួចបឈ្ឈប់ទាញខាងក្រោយស្តាំ ដៃ ។

  • ចុចលើ Double-click លើ control type ក្នុងប្រអប់ toolbox ។ កាលណាអ្នកចុចលើ Double-click លើ control ក្នុងប្រអប់ toolbox control ថ្មីមួយដែលបានជ្រើសរើសប្រភេទគឺត្រូវបានប្តូរខាងលើឆ្វេងដៃ នៃ form ។
  • ទាញ control មួយពីប្រអប់ toolbox និង drop វាលើ form មួយ ។

មើលនិងប្តូរ Properties

ជាដំបូងមានប៊ូតុងពីរក្នុង Properties window អាចជ្រើសរើស format ដែលអ្នកមើលក្នុង properties ។ កាលណាជ្រើសរើសប៊ូតុង Alphabetic ត្រូវបានជ្រើសរើស object របស់ properties ដែលបង្ហាញក្នុង Properties window ក្នុង alphabetical ។ កាលណាអ្នកចុចលើប៊ូតុង Categorized ដែលបានជ្រើសរើសទាំងអស់ object របស់ properties គឺត្រូវបាន list ដោយប្រភេទ category ។ ឧទាហរណ៍ប្រភេទ Appearance category ផ្ទុក properties ដូចជា BackColor and BorderStyle ។ កាលណាធ្វើការជាមួយ properties​ជ្រើសរើស view អ្នកអាចមានភាពងាយ ស្រួលជាមួយ ។ តំបន់ Properties នៃសន្លឹក Properties window ត្រូវបាន

ប្រើដើម្បី view មើលនិងបង្កើត properties ដែលបានជ្រើសរើស object ។ អ្នកអាចបង្កើត property ក្នុងជំហានដូចខាងក្រោមនេះ:

  • វាយសរសេរក្នុង value
  • ជ្រើសរើស value ពីក្នុង drop-down list

ចុចលើប៊ូតុង Build នៃ property-specific options

ធ្វើការជាមួយ Color Properties

Properties ដែលបែងចែក colors គឺជាដែលមានមធ្យោបាយតែមួយ គត់ដែលវាអនុញ្ញាតក្នុងតំលៃ values ក្នុង Visual C# មាន colors ទាំងអស់គឺ

បានសំដែងបង្កើតមាន3 ចំនួនដែលចំនួននីមួយៗដែលមានតំលៃ value ពី 0 ទៅ 255 ។ ផ្តល់អោយបង្កើតនៃចំនួនបង្ហាញ Red, Green និង Blue (RGB) សមាសភាពនៃ color តំណាងតំលៃ 0,255,0 ឧទាហរណ៍បង្ហាញពណ៌ pure green ចំណែកឯតំលែ 0,0,0 បង្ហាញពណ៌ខ្មៅ black និង 255,255,255 បង្ហាញពណ៌ស white។ រូប 2.11 ពណ៌ color drop-down list អាចអោយ អ្នកជ្រើសរើសពីការបង្កើត 3 នៃបណ្តាពណ៌ colors។
aពណ៌ color drop-down list មានបី tabs: Custom, Web និង System ។ មាន color properties ជាច្រើនប្រើក្នុងប្រព័ន្ធ system color ដោយ default ។ ប្រើប្រព័ន្ធ system color កាលណាអ្នកចង់បានពណ៌ color អ្នកប្រើប្រាស់ដែលបានជ្រើសរើសក្នុង system colors ។ កាលណា color property មួយគឺបានបង្កើតទៅ system color ឈ្មោះនៃ color បង្ហាញក្នុង property sheet ។ ក្នុង Custom tab បង្ហាញដូចក្នុងរូប 2.12 ត្រូវបានប្រើ ដែលមាន លក្ខណ: ពិសេសនៃ color ដែលអ្នកប្រើប្រាស់ប្រើក្នុងsystem color settings; អាចប្តូរប្រព័ន្ធ system colors ដែលមិនប៉ះពាល់ property ។
aអថេរ ប្រមាណវិធី Operator និងកន្សោម Expressionក្នុងជំពូកទី1 ណែនាំអំពីរបៀបប្រើប្រាស់សរសេរ Code Microsoft Visual Studio.NET ដើម្បីដំឡើងរត់កម្មវិធី Command Line និងការប្រើប្រាស់Windows Form។ ជំពូកនេះនឹងណែនាំបណ្តា សមាសភាពក្នុងកម្មវិធី Microsoft Visual C# រួមមានកន្សោម command។

ពាក្សគន្លឹះ

កម្មវិធី C# Programming មានផ្តល់ 76 ពាក្សសំរាប់ ប៉ុន្តែពាក្សនេះត្រូវ

បានហៅថា​ពាក្សគន្លឹះ(Key word) ហើយពាក្សគន្លឹះនីមួយៗមានន័យខុសៗគ្នា

ឧទាហរណ៍ដូចជាបណ្តាពាក្ស : Class, using, namespace ។ ខាងក្រោមនេះ

ជា list បណ្តាពាក្សកន្លឹះរបស់ C#។

  តារាង list ពាក្សកាត់

abtract as base bool
break byte case catch
char checked class const
continue decimal default delegate
do double else enum
event explicit extern false
finally fixed float for
foreach goto if implicit
in int interface internal
in int long namespace
is lock Object operator
Out Override Params Private
protected Public Readonly Ref
return sbyte sealed short
sizeof stackalloc static string
struct switch this throw
true try typeof unit
ulong unchecked unsafe ushort
using virtual void while

3. របៀបប្រើប្រាស់អថេរ

អថេរជាកន្លែងប្រើសំរាប់រក្សាទុកតំលៃ អ្នកអាចគិតពីអថេរដូចជាសំណុំ

មួយរក្សាទុកពត៌មានបណ្តោះអាសន្ន ។ ឈ្មោះអថេរត្រូវតែមានមួយគត់

ដាក់ឈ្មោះអថេរ

ដាក់ឈ្មោះអោយអថេរ អ្នកត្រូវធ្វើតាម

C មិនប្រើសញ្ញា (_)

C ឈ្មោះចាប់ផ្តើមដោយអក្សធម្មតា

C ជាមួយករណីពាក្សរួមមានច្រើនពាក្ស ពេលចាប់ផ្តើមពាក្សដំបូងពី ពាក្សទី2 (Second word) ក្លាយជាពាក្សដែលចាប់ផ្តើមដោយប្រើពាក្ស

ធម្មតា ។

ឧទាហរណ៍ ដូចជា score, fortyTwo, _score និង FortyTwo

  1. របៀបប្រើទិន្នន័យ

C# មានទិន្នន័យមួយចំនួនបង្កើតមានរួចស្រេចត្រូវបានហៅថាប្រភេទ

ទិន្នន័យ ។ តារាងខាងក្រោមបង្ហាញពីប្រភេទទិន្នន័យដែលច្រើនប្រើបំផុត ។ ប្រភេទ int នឹង long រក្សាតំលៃចំនួនគត់ (ប្រភេទ long រក្សាតំលៃធំជាងប្រភេទ int, ទោះបីជាវាត្រូវការប្រើច្រើន memory) ប្រភេទ Float និង double រក្សា តំលៃដែលមានសញ្ញាក្បៀស(ប្រភេទ double មានកំរិតជាក់ស្តែងខ្ពស់ជាងពីរដងប្រភេទ float) ប្រភេទប្រព័ន្ធគោល 2 ត្រូវបាន Design សំរាប់រក្សាតំលៃពី 28 Character, ប្រភេទ char រក្សាទុកទំរង់ជា Unicode ប្រភេទស្វីតរក្សា

សំណុំមួយបណ្តា Character និងប្រភេទ bool រក្សាឬ true ឬ false ។

      អថេរមិនមានសញ្ញា ពេលអ្នកប្រើអថេរមួយ វានឹងផ្ទុកតំលៃមួយចៃដន្យមួយអោយដល់ពេល ណាអ្នកបានផ្គុំវាជាមួយតំលៃមួយ ។ នេះជាមូលហេតុដែលលេចចេញ error ក្នុង C, C++ ពេលដែលមានអថេរបានបង្កើតចេញប្រើប្រាស់ពេលផ្គុំជាមួយតំលៃផ្តល់អោយវា ។ C# មិនអាចអនុញ្ញាតអនុវត្តករណីនេះ អ្នកត្រូវផ្គុំតំលៃអោយ

អថេរមុនពេលដែលប្រើវា ច្រាស់មកវិញកម្មវិធីនិងមិនអាច Compile ការទាមទារ

នេះត្រូវបានកំណត់ Define Assignment Rule ឧទាហរណ៏កន្សោមខាងក្រោម

និងបង្កើតចេញ error ក្នុងពេល Compile code ដែលបង្កើតអថេរ age មិន

អាចផ្គុំបាន ។

Int age;

ប្រភេទ អធិប្បាយ ទំហំ(bit) កំរិត ឧទាហរណ៍
int ចំនួនគត់ 32 -231 ~  231-1 Int count;Count=42;
long ចំនួនគត់ 64 -263 ~  263-1 Long wait;Wait=42L;
float ចំនួនទសភាគ 32 +3,4Í1038 Float away;Away=0.42F;
double ចំនួនទសភាគពិតទ្វេគុណ 64 ±1,7Í1038 Double trouble;Trouble=0.42;
decimal 128 28លេខ Decimal coin;Coin=0.42M;
string 16bit ក្នុង Character មិនកំណត់ String vest;Vest=”42”
char 16 216-1 Char grill;Grill=’4’;
bool 8 True ឬ False Bool teeth;Teeth=false;

ចំណាំ: 216  =32.768; 231 =2.147.483.648 និង 263 =9.223.372.036.854.775.808

ក្នុងឧទាហរណ៍ខាងក្រោមអ្នកនឹងប្រើកម្មវិធីបានដាក់ឈ្មោះគឺ PrimitiveDataTypes ដើម្បីអនុវត្តជាមួយប្រភេទទិន្នន័យ ។

  លេចចេញតំលៃរបស់ប្រភេទទិន្នន័យ

  1. ចាប់ផ្តើមបើក Visual Studio.NET
  2. ពី menubar ចុចលើ File ចូលក្នុង open រួចចុចលើ Project
    ប្រអប់ Open Project បើកចេញ ។

    1. បើក Project PrimitiveTypes ក្នុង directory \Visual C# Step by Step\chapter2\PrimitiveDataTypes ។
    2. ពី menubar ចូល debug, ចុចជ្រើសរើសលើ Start

    ប្រើសរើស Windows លេចឡើងដូចរូប 2.1
    a

    1. ក្នុង list Choose a data type ចុចជ្រើសរើសលើ String

    តំលៃ “42” លេចឡើងក្នុងប្រអប់ Sample Value

    1. ចុចជ្រើសរើស int ក្នុង list

    តំលៃ “to do” លេចឡើងក្នុង Sample value គឺបង្ហាញចេញ Command ដើម្បីលេចចេញតំលៃប្រភេទ int នៅតែត្រូវបាន

    សរសេរ ។

    1. ជ្រើសរើស​​ប្រភេទផ្សេងក្នុង list

    ចូរកំណត់ Code ដែលផ្តល់ដោយប្រភេទ Double, bool។

    1. ចុចជ្រើសរើស Quit លើកម្មវិធីប្រើប្រាស់ ។

    Control ត្រូវបានត្រួតពិនិត្យ Visual Studio.NET

    ប្រើប្រភេទទិន្នន័យក្នុងកម្មវិធី

    1. ជ្រើសរើស Form1.cs ក្នុងប្រអប់សរសេរ code (ជ្រើសរើស Form រួចចុចលើ Right Click ជ្រើសរើស View Code ប្រើសិនបើ Form1.cs ផ្ទុកលេចឡើង ។
    2. ក្នុងប្រអប់សរសេរ code រកកន្សោម showFloatValue ដូចខាង

    ក្រោម :

    private void showFloatValue()

    {

    float var;

    var = 0.42F;

    value.Text = “0.42F”;

    }

    1. ក្នុងប្រអប់សរសេរ code កំណត់កន្សោម ShowIntValue ដូចខាងក្រោម :

    private void showIntValue()

    {

    value.Text = “to do”;

    }

    កន្សោម showIntValue ត្រូវបានហៅថាមកពេលអ្នកជ្រើសរើស int

    ក្នុងប្រអប់ list ។ អនុគមន៍នេះផ្ទុកកន្សោម Command មួយ។

    4. បញ្ចូល 2កន្សោម Command ចូលអនុគមន៍ showIntValue:

    int var;

    var = 42;

    អនុគមន៍ ShowIntValue ពេលនេះនឹងមានដូចខាងក្រោម:

    private void showIntValue()

    {

    int var;

    var = 42;

    value.Text = “to do”;

    }

    5.  ពី menubar build ចុចជ្រើសរើស Build

    ដំណើរការបង្កើតជោគជ័យ

    1. ឥឡូវប្តូរស្វីត “ to do ” ទៅ 42

    កន្សោម showIntValue ពេលនេះនឹងមើលឃើញខាងក្រោម

    private void showIntValue()

    {

    int var;

    var = 42;

    value.Text = “42”;

    }

    1. ពី menubar Debug ចុចជ្រើសរើស Start ។ ប្រើប្រាស់ Windows Form លេចឡើង ។
    2. ជ្រើសរើស int ក្នុង list ។ កំណត់ដោយតំលៃ 42 ដែលលេចឡើង

    ក្នុងប្រអប់ Sample value ។

    1. ចុចជ្រើសរើស Quit ដើម្បីបិទកម្មវិធី ។
    2. ក្នុងប្រអប់សរសេរ code រកមើលអនុគមន៍ showDoubleValue
    3. ប្តូរអនុគមន៍ showDoubleValue ដូចខាងក្រោម:

    private void showDoubleValue()

    {

    Double var;

    Var=0.42;

    value.Text = “0.42”;

    }

    1. កំណត់តំលៃអនុគមន៍ ShowBoolValue ក្នុងប្រអប់សរសេរ code
    2. ប្តូរអនុគមន៍ showBoolValue ដូចខាងក្រោមនេះ:

    private void showBoolValue()

    {

    Bool var;

    Var=false;

    value.Text = “false”

    }

    1. ពីក្នុង menubar Debug ចុចជ្រើសរើស​លើ Start

    ប្រើប្រាស់ Windows Form លេចឡើងម្តងទៀតចុចជ្រើសរើសលើ int, Double និង boolក្នុងករណីនីមួយៗ ចូរត្រួតពិនិត្យមើលដោយកំនត់តំលៃកើតឡើងក្នុង Sample Value គឺត្រឹមត្រូវ ។ចុចជ្រើសរើស Quit ដើម្បីបិទកម្មវិធី។

    1. បង្កើតប្រមាណវិធី

    កម្មវិធី C# មានផ្គត់ផ្គង់និមិត្មសញ្ញាជាច្រើនដែលធ្លាប់ជួបប្រទេះដូច

    ជាសញ្ញា (+) និងសញ្ញា (-) ដែលអនុញ្ញាតបូកនិងដកលេខ សញ្ញាផ្កាយ (*) ប្រើសំរាប់គុណនិងសញ្ញា (/) សំរាប់ធ្វើប្រមាណវិធីចែក ។ មាននិមិត្តសញ្ញាជា ច្រើនទៀតដែលហៅយកមកប្រើជាមួយប្រមាណវិធីសំរាប់ធ្វើសកម្មភាពដែល មានតំលៃដើម្បីបង្កើតចេញតំលៃថ្មី ។ ក្នុងឧទាហរណ៍ខាងក្រោមនេះអថេរ moneyPaidConsoltant ចុងក្រោយរក្សាតំលៃនិងលទ្ធផល 500គុណនិង20

    long moneyPaidConsultant;

    moneyPaidToConsultant=500*20

    កំណត់តំលៃរបស់ប្រមាណវិធីមួយ

    អ្នកអាចប្រើប្រមាណវិធីមួយលើតំលៃរួមចូលក្នុងប្រភេទរបស់តំលៃឬមិន

    ជារបស់តំលៃ ។ ឧទាហរណ៍យើងអាចប្រើប្រមាណវិធីទាំងអស់លើតំលៃ char, int, long, float, double និង Decimal ។ ទោះបីជាដែលអ្នកមិនប្រើប្រមាណ វិធីលើប្រភេទ String ឬ bool ។ កន្សោម Command ខាងក្រោមមិនអាច

    អនុញ្ញាតអោយស្វីត string ផ្គត់ផ្គង់ប្រមាណវិធីដក ។ ប្រមាណវិធីដកខាងក្រោម

    នេះគឺគ្មានន័យ ។

    // compile time error

    Console.WriteLine(“Gillingham” – “Manchester City”);

    ក្រៅពីប្រមាណវិធីបូក + ត្រូវបានប្រើដើម្បីភ្ជាប់ជាមួយបណ្តាតំលៃស្វីត

    កន្សោម Command ខាងក្រោមនេះផ្តល់អោយតំលៃ “43”+”1”);

          ត្រួតពិនិត្យបណ្តាប្រមាណវិធី

    ឧទាហរណ៍ខាងក្រោមនេះពីរបៀបប្រើប្រាស់បណ្តាប្រមាណវិធី គណិតវិទ្យាលើតំលៃ int ។

    ធ្វើជាមួយប្រមាណវិធី

    1. ពីក្នុង menubar ចូល File ចុចលើ Open រួចចុចជ្រើសរើសលើ Project ។

    ប្រអប់ Open Project លេចឡើង ។

    1. បើក Project MathsOperators ក្នុង directory \Visual C# Step by Step\Chapter2\MathOperators
    2. ពីក្នុង menubar ចូល Debug ចុចជ្រើសរើសលើ Start
    3. បញ្ចូល 54 ក្នុងប្រអប់ Left Operand ។
    4. បញ្ចូល 13 ក្នុងប្រអប់ Left Operand ។
    5. ជ្រើសរើស Subtraction រួចចុចលើ Caculate ។ តំលៃក្នុងប្រអប់ Expression ប្តូរពី 54-13 និង 41 លេចឡើងក្នុង

    ប្រអប់ Result ។

a

  1. ជ្រើសរើស /Division រួចចុចលើ Caculate

តំលៃក្នុង Expression ប្តូរពី 54/13 និង 41 លេចឡើងក្នុងប្រអប់

លទ្ធផល ។ តាមធម្មតា 54/14 គឺ 4.153846 ប៉ុន្តែក្នុង C# ពេលអ្នកចែកចំនួន គត់ផ្សេងអ្នកត្រូវតែទទួលបានចំនួនគត់មួយទៀត ។

  1. ជ្រើសរើស %Remainder រួចចុចលើ Calculate ។

តំលៃក្នុង Expressiong ប្តូរពី 54%13 និងក្នុងលទ្ធផលគឺ 2 ដោយ 54-((54/13)*13) គឺ2 ។

  1. សមមូលខាងលើចូរត្រួតពិនិត្យមើលបណ្តាប្រមាណវិធី ។ ចុចបញ្ចប់ ចុចជ្រើសរើសលើ Quit ដើម្បីចេញពីកម្មវិធី ។

ត្រួតពិនិត្យមើល Code របស់ប្រមាណវិធី  Math operator

  1. ជ្រើសរើស Form1.cs (ចុចលើ mouse ខាងស្តាំដៃលើ Form រួចជ្រើសរើស View code មិនទាន់លេចឡើង) ។

File លេចឡើងក្នុងប្រអប់សរសេរ​ code

  1. ក្នុងប្រអប់សរសេរ ​code រកកន្សោមទាំងពីរខាងក្រោមនេះ:

private System.Windows.Forms.TextBox lhsOperand;

private System.Windows.Forms.TextBox rhsOperand;

កន្សោមពីអថេរ lhsOperand និង rhsOperand របស់ប្រភេទ

Textbox ។ Textbox មិនមែនជាប្រភេទទិន្នន័យ(មិនមានរួចស្រេចនៅលើ C#)

តែប្រភេទដែលបានផ្តល់និយមន័យក្នុង Library បានផ្គត់ផ្គង់ក្នុង Microsoft ។ ប្រភេទ Textbox មិនអាចប្រើប្រាស់ក្នុង Windows ដើម្បីលេចឡើងប្រអប់ សរសេរលើ Form ។

  1. ក្នុងប្រអប់សរសេរ code កំណត់កន្សោម Command ដូចខាងក្រោម;

private System.Windows.Forms.TextBox result;

private System.Windows.Forms.TextBox expression;

  1. កំណត់វិធី SubtractValues ក្នុងប្រអប់សរសេរ code

private void subtractValues()

{

int lhs = int.Parse(lhsOperand.Text);

int rhs = int.Parse(rhsOperand.Text);

int outcome;

outcome = lhs – rhs;

expression.Text = lhsOperand.Text + ” – ” + rhsOperand.Text;

result.Text = outcome.ToString();

}

រចនាមើលសន្លឹក Design View window និង Code ហើយនិង Text Editor

មើលក្នុង View menu ចុចលើសន្លឹកផ្សេងទៀតរួចហើយចុចលើ Document Outline។
aការធ្វើប្រមាណវិធី

        ការធ្វើប្រមាណវិធីគឺជាលេខរៀងដែលប្រមាណវិធីបានវាយតំលៃ ។ ចូរមើលកន្សោមខាងក្រោមវាប្រើប្រាស់ 2ប្រមាណវិធី​+ និង * :

2+3*4

     – ប្រសិនបើប្រមាណវិធីបូកអនុវត្តមុននោះ (2+3) ក្លាយទៅជាការគណនាខាងឆ្វេងរបស់ប្រមាណវិធី​+ លទ្ធផលរបស់ប្រមាណវិធី

បង្ហាញគឺ 5*4(=20)។

– ប្រសិនបើប្រមាណវិធី * ត្រូវបានអនុវត្តមុនពេល(3*4)ក្លាយជាការ

គណនាខាងស្តាំដៃរបស់ប្រមាណវិធី + លទ្ធផលរបស់ប្រមាណវិធី នឹងបង្ហាញគឺ 2+12(=14)។

ក្នុង C# មានលក្ខណ: (*, /, %)មានលក្ខណ:អធ្យាស្រ័យជាង បណ្តាលក្ខណ:+/- ។ អ្នកអាចប្រើសញ្ញា​() ដើម្បីកំណត់មានលក្ខណ:អធ្យា ស្រ័យនៃប្រមាណវិធី ឧទាហរណ៍ខាងក្រោមប្រើប្រាស់សញ្ញា()ដើម្បីផ្តុំ 2និង3 ជាមួយប្រមាណវិធី + មុនពេលមានលទ្ធផលបន្ទាប់ភ្ជាប់ជាមួយប្រមាណវិធី * ដើម្បីចេញលទ្ធផល 20 ។

(2+3)*4

ប្រើលក្ខណ:ផ្សំដើម្បីវាយតំលៃកន្សោម

លក្ខណ:ផ្សំគឺបង្ហាញ (ឆ្វេងឬស្តាំ) អោយប្រមាណវិធី/ ទៅប្រមាណវិធី របស់កន្សោម ។ ចូរមើលឧទាហរណ៍:

2/3*4

– ប្រសិនបើ (2/3) បានវាយតំលៃមុន ខាងក្រោមលទ្ធផលផ្គុំជាមួយ ប្រមាណវិធី * ជាមួយលេខ 4 ដែលមានលទ្ធផលគឺ 8/3

– ប្រសិនបើ (3*4) បានវាយតំលៃមុន លទ្ធផលខាងក្រោមផ្គុំជាមួយ ប្រមាណវិធី + ជាមួយលេខ 2 ប្រមាណវិធីចុងក្រោយគឺ 2/12 ។

ការតំឡើងនិងបញ្ចុះអថេរ Variable

ប្រសិនបើលោកអ្នកចង់បន្ថែម 1 ទៅលើអថេរ variable មួយលោកអ្នកអាចប្រើ ប្រមាណវិធីបូក + operator:

count = count + 1;

ដើម្បីបង្កើនអថេរ variable count​ ដោយ 1 សរសេរ statement ខាងក្រោម:

count++;

តារាងខាងក្រោមនេះ បង្ហាញដើម្បីប្រើពីរប្រមាណវិធី operator ដោយមិនសរសេរ Write ដូចនេះ:

variable = variable + 1; variable++;

variable = variable – 1; variable–;

IT ads

មេរៀនទី៣: Method និង Scope

មេរៀនទី៣: Method និង Scope

ក្នុងជំពូកនេះនឹងរៀនពីរបៀប

· បង្កើតនិងហៅ method

· ផ្ញើពត៌មានដល់ method

· ត្រលប់មកពត៌មានពី method

ក្នុងជំពូកទី2 អ្នកនឹងបានរៀនពីរបៀបប្រកាសអថេរ declare variables និង          របៀបបង្កើត កន្សោម ដោយប្រើប្រមាណវិធីនិងរបៀបត្រួតពិនិត្យមើលកន្សោម ដែលផ្ទុកប្រមាណវិធីច្រើន។ ក្នុងជំពូកនេះអ្នកនឹងរៀនអំពី methods ។ អ្នកនឹងរៀនពីរបៀបដើម្បីប្រើ arguments និង parameters សំរាប់ផ្ញើពត៌មានទៅ method ហើយនិងរបៀប return ពត៌មានពី method ដែលប្រើ return statements ។

1.    ប្រកាស  Method ក្នុង method គឺជាការប្រកាស statement ដែលបានដាក់ឈ្មោះ។ ក្នុង method នីមួយៗមានឈ្មោះនិងខ្លួនរបស់វា ។ ក្នុង method body មានផ្ទុក សេចក្តីប្រកាស ជាច្រើនការប្រកាសពិតប្រាកដ៍ដើម្បីរត់ដំណើរការកាលណា method ត្រូវបានហៅមកប្រើ ។ ឈ្មោះ method និងមានន័យពេញលេញ (meaningful identifier) ដែលបង្ហាញគោលបំណងរួមនៃ method (ឧទាហរណ៍ដូចជា CalculateIncomeTax) ។ មាន method ជាច្រើនអាច បញ្ជូនផ្តល់ data មួយចំនួនដើម្បីអោយវាដំណើរការនិងពត៌មានត្រឡប់ដែល

តែងតែផ្តល់លទ្ធផលនៃដំណើរការ ។ Method នេះគឺជាមូលដ្ឋានដែលមាន កំលាំងខ្លាំង ។

ចំណុចសំខាន់ៗនៃ Method Declaration Syntax

syntax Microsoft Visual C# មានដូចខាងក្រោមនេះ:

returnType methodName ( parameterList )

{

// method body statements go here

}

// បណ្តា Command line របស់ method

}

< returnType> គឺជាឈ្មោះនៃប្រភេទនិងលក្ខណ:ប្រភេទនៃពត៌មានក្នុង  method returns ។ ប្រភេទនេះគឺជាឈ្មោះនៃប្រភេទ ដូចជា int ឬ string ។ ប្រសិនបើសរសេរ method មួយដែលមិនត្រលប់ទៅតំលៃអ្នកត្រូវប្រើ   keyword ក្នុងកន្លែងប្រភេទ return type ។

· <methodName> គឺជាឈ្មោះដែលប្រើដើម្បីហៅ method ។​ ដែល ឈ្មោះ Method names ត្រូវធ្វើតាមដូចតួនាទីដូចជាឈ្មោះ variable name ឧទាហរណ៍ addValues គឺជាឈ្មោះ method name ត្រឹមត្រូវ ទោះបីជា

add$Values មិនបានកំណត់ត្រឹមត្រូវ ។ ឥឡូវនេះអ្នកនឹងប្រើ camelCase សំរាប់ឈ្មោះ method names ហើយអ្នកនឹងបង្កើតឈ្មោះ method names ។

· <parameterList> គឺជាប្រភេទពត៌មានដែលអធិប្បាយពីប្រភេទនិង នៃពត៌មានដែល method អនុញ្ញាត ។ អ្នកសរសេរ parameters ចន្លោះពីឆ្វេង ទៅស្តាំដៃដូចជាឆ្លងកាត់ការប្រកាសអថេរ: ឈ្មោះនៃប្រភេទដែលមានឈ្មោះនៃ parameter ។ ប្រសិនបើ method ដែលអ្នកកំពុងសរសេរឬមាន parameters, ជាច្រើនអ្នកត្រូវបែងចែកវាដោយប្រើសញ្ញាcommas ។

· <method body statements> គឺជាបន្ទាត់នៃ code ដែលរត់

ដំណើរការកាលណា method ត្រូវបានហៅចេញ ។ វាប្រើសញ្ញាបើក ({) និង សញ្ញាបើក (})។

ខាងក្រោមនេះនិយមន័យនៃ method ត្រូវបានហៅ addValues ដែល តំលៃត្រឡប់ int និងមាន int parameters ពីរដែលហៅថា lhs និង rhs (short for left-hand side និង right-hand side):

int addValues(int leftHandSide, int rightHandSide)

{

// …

// method body statements go here

// …

}

// បណ្តា command ក្នុង method body

}

ខាងក្រោមនេះគឺជានិយមន័យនៃ method ដែលហៅថា showResult ដែលតំលៃមិនត្រឡប់គឺមាន single int គឺជាប្រភេទ parameter ដែលហៅថា answer:

void showResult(int answer)

{

}

ចំណាំ: អ្នកប្រើ keyword ដើម្បីបង្ហាញ method មិនធ្វើការត្រឡប់។ អ្នកសរសេរ Visual Basic programmers នឹងកំណត់ចំណាំ C# មិនប្រើច្បាស់ keywords រវាង method ដែលតំលៃត្រឡប់ (ក្នុងអនុគមន៍) ហើយ method ដែលតំលៃមិនត្រឡប់ (procedure ឬ subroutine) ។

ប្រសិនបើអ្នកចង់បាន method របស់អ្នកដើម្បីត្រឡប់ពត៌មានអ្នកត្រូវ សរសេរ return statement នៅក្នុង method ។ អ្នកធ្វើបែបនេះដោយប្រើ keyword return ដែលធ្វើតាមដោយប្រើ expression ដែលគណនាតំលៃ

ត្រឡប់និង semicolon ។ ប្រភេទ expression ត្រូវដូចនិងលក្ខណ:ពិសេស អនុគមន៍ ។ អនុគមន៍ត្រឡប់ function returns int និងការប្រកាសត្រឡប់ return statement ត្រូវត្រឡប់ int ។

ឧទាហរណ៍

int addValues(int leftHandSide, int rightHandSide)

{

// …

return leftHandSide + rightHandSide;

}

ការប្រកាស return statement ត្រូវចុងក្រោយបំផុតរបស់ method របស់អ្នកវាបណ្តាអោយ method បញ្ចប់ finish ។ ក្នុងសេចក្តីប្រកាសបន្ទាប់ពី ប្រកាសត្រឡប់ return statement និងមិនប្រត្តិបត្តិ (ឆ្លងកាត់ compiler និង ព្រមានអំពីបញ្ហា problem នេះប្រសិនបើ បញ្ចូល សេចក្តីប្រកាស statements បន្ទាប់ពី return statement) ។ ប្រសិនបើអ្នកមិនចង់បាន method របស់អ្នក ពត៌មានត្រឡប់អ្នកអាចប្រើផ្លាស់ប្តូរនៃ return statement ដែលបណ្តាពីមូល ហេតុបញ្ចប់ភ្លាមៗពី method ។ អ្នកសរសេរ keyword return​ឧទាហរណ៍

void showResult(int answer)

{

// …

}

ប្រសិនបើ method របស់អ្នកមិន return អ្វីទាំងអស់អ្នកអាចលុប return statement ពីព្រោះ method នឹងបញ្ចប់ដោយ automatically កាលណាការប្រត្តិបត្តិចូលមកដល់ក្នុង ពេល បិទ ឬការបញ្ចប់នៃ method ។ ទោះបីជា ការអនុវត្តធម្មតាតែងតែត្រិះរិះពី style ដ៏ល្អៗ ។ Methods ដែលត្រឡប់ return តំលៃមួយដែលមានផ្ទុក return statement ។ មិនមានទំហំ minimum size សំរាប់ method ។ ប្រសិនបើជំនួយ method ដើម្បីជាសវៀងការច្រឡំផ្ទួនៗ និងបង្កើតកម្មវិធីបាន ភ្លាមៗអោយយល់ ពី method ដែលមានប្រយោជន៍ដែលយើងមិនបានគិតដល់ ។

1. ចាប់ផ្តើម Visual Studio .NET.

2. នៅលើ File menu ចំនុចដើម្បី Open រួចហើយចុចលើ Project បើកប្រអប់ Open Project dialog box ។

3. ក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 3\Methods នៅក្នុង My Documents folder បើក Methods project ។ បើក Methods project ក្នុងកម្មវិធី programming

Environment ។

4. លើ Debug menu ចុចលើ Start. Visual Studio .NET builds និង runs កម្មវីធីប្រើប្រាស់ ។

5. ការអនុវត្តដោយប្រើកម្មវិធី application រួចហើយចុចលើ Quit ។ អ្នកនឹងត្រឡប់ចូលទៅក្នុង Visual Studio.NET programming environment ។

6. ក្នុង Code pane ចុចលើ Form1.cs (ចុច Right-click លើ form រួចហើយជ្រើសរើស View Code ប្រសិនបើ Form1.cs tab គឺមិនអាច សំដែងចេញ ។ ប្រសិនបើ form មិនអាចសំដែងចេញចុចលើ right-click Form1.cs ក្នុង Solution Explorer រួចជ្រើសរើស View Code) ក្នុង Code View នៃ Form1.cs បើកក្នុង Code pane ។

7. ក្នុង Code pane ទីតាំង addValues method ។  Code pane  របស់អ្នកឥឡូវនេះបង្ហាញដូចខាថក្រោម:

7. ចូល addValues method ដែលមានផ្ទុក statements ពី ។  statement ទីមួយផ្តល់ទៅអោយកន្សោម expression ។ ក្នុង Text property string ដែលបានបង្កើតដោយដាក់បន្តបន្ទាប់ដែលមានបី strings ហើយ statement ទីពីរបន្ថែមតំលៃនៃ lhs និង rhs int អថេររួមដែលប្រើប្រមាណវិធី + រួចហើយត្រឡប់ចូលលទ្ធផលនៃការ

បន្ថែមនេះ ។ ចាំថាការបន្ថែមតំលៃ int រួមបង្កើតតំលៃ int ផ្សេងទៀត រួចហើយត្រឡប់ចូលប្រភេទនៃ addValues គឺជា int ។

8. ក្នុង Code pane ទីតាំងដែលបង្ហាញលទ្ធផល method។

9. ក្នុងការបង្ហាញលទ្ធផល showResult method មានផ្ទុក statement មួយដែលផ្តល់អោយទៅលទ្ធផល ។ ក្នុង Text property string មួយការបង្ហាញចំលើយ Parameter ។

2. ការហៅ Method Methods ដែលមានរួចស្រេចដែលបានហៅ អ្នកអាចហៅ method ដោយឈ្មោះដើម្បីទាមទារវាសំដែងចេញ ។ ប្រសិនបើ method ស្នើសុំពត៌មាន (ដូចជា លក្ខណ:ពិសេសដោយប្រើ parameters) អ្នកត្រូវអនុវត្តពត៌មានដែល   ស្នើសុំ ។ ប្រសិនបើ method ត្រឡប់ចូលទៅក្នុងពត៌មានអ្នកនឹងចាត់ចែងទៅ ទទួលពត៌មាននេះ ។ លក្ខណ:ពិសេស Method ហៅ Syntax ដែល syntax នៃ C# method ហៅដូចខាងក្រោមនេះគឺ:

<methodName> ( argumentList)

­ <methodName> ត្រូវសមស្របច្បាស់លាស់ដូចជាឈ្មោះនៃ method អ្នកកំពុងហៅ ។ គួរចាំថា C# គឺជា Programming language ដែល មានលក្ខណ:ពិសេស ។

­ <argumentList> ផ្គត់ផ្គង់បណ្តាពត៌មានដែលជ្រើសរើសប៉ុន្តែ method អាចទទួលយកបាន ។ អ្នកត្រូវអនុវត្ត argument សំរាប់ parameter, នីមួយៗរួចហើយតំលៃ argument នីមួយៗត្រូវគ្នាជាមួយប្រភេទ parameter របស់វា ។ ប្រសិនបើ method អ្នកកំពុងហៅមានពីពីរឬច្រើន parameters អ្នក នឹងបែងចែក arguments ជាមួយសញ្ញា commas. ។

ប្រយត្ន័: អ្នកត្រូវសរសេរសញ្ញាវង់ក្រចកក្នុងគ្រប់ method បានហៅ មកភ្លាមពេល method មួយមិនមាន argument។

ទីនេះគឺ addValues method:

private int addValues(int leftHandSide, int rightHandSide)

{

expression.Text = leftHandSide.ToString() + ” + ” +

rightHandSide.ToString();

return leftHandSide + rightHandSide;

នុង addValues method មានពីរ int parameters ដូច្នេះអ្នកត្រូវហៅ វាជាមួយចំនួនគត់និងពីរសញ្ញាចុច comma ដកឃ្លា:

addValues(39,3) // ដែលអាចទទួលបាន

ប្រសិនបើព្យាយាមដើម្បីហៅ addValues ដោយរបៀបផ្សេងអ្នកនឹងមិនទទួល ជ័យជំនេះ :

addValues// compile time error,no parentheses

addValues()//compile time error,not enough arguments

addValues(39)// compile time error, not enough? arguments

addValues(“39”, “3”) //compile time error, wrong types

ក្នុង addValues method ត្រឡប់ចូលទៅតំលៃនៃចំនួនគត់ int ។ ក្នុង ចំនួនគត់ int ត្រូវបានប្រើពេលណាមួយប៉ុន្តែតំលៃប្រភេទចំនួនគត់អាចប្រើ:

result = addValues(39, 3); //ខាងស្តាំនៃប្រមាណវិធីបានបែងចែក

showResult(addValues(39,3));

//គឺជាចំនួនផ្លាស់ប្តូរអោយ method ផ្សេង

ត្រួតពិនិត្យមើលការហៅ method

1. ក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 3\Methods folder នៅក្នុង My Documents folder របស់អ្នកបើក Methods project ។ (ក្នុង project នេះមានរួចស្រេចបើកក្នុង Visual Studio.NET ប្រសិនបើអ្នកកំពុងតែបន្តពីលំហាត់) ។

2. ក្នុង Solution Explorer ចុចលើ right-click លើ Form1.cs រួច ហើយចុចលើ View Code ។

3. ទីតាំង calculate_Click method មើលក្នុង statement តាំងបួន នៃ method នេះ ។

3. បង្ហាញលទ្ធផល showResult(addValues(lhs, rhs));

4. ក្នុង Code pane រកមើល showResult method ។ ក្នុង statement តែមួយគត់នៃ method: result.Text = answer.ToString();

3.  ស្វែងយល់ Scope អ្នកបានស្គាល់គឺអាចបង្កើតអថេរដែលអ្នកអាចបង្កើតនៅក្នុង method ។ អថេរគឺត្រូវបានបង្កើតក្នុង statement វាបានផ្តល់និយមន័យ។ បណ្តា  statements ផ្សេងទៀតក្នុង method ដែលស្ថិតនៅអាចប្រើអថេរ។ អថេរអាចប្រើជាកន្លែងផ្ទុកបន្ទាប់ពីវាបានបង្កើត ។ ម្តងទៀត method បាន បញ្ចប់អថេរបាត់ភ្លាម ។ ប្រសិនបើ completely ហើយបើសិនប្រើលក្ខណ:

ពិសេសទីតាំងក្នុងកម្មវិធី។ Scope​ អនុវត្តទៅក្នុង methods ដែលជាអថេរល្អ ប្រសើរ ។​ អត្តសញ្ញានៃ scope ភ្ជាប់ជាមួយទីតាំងនៃការប្រកាស declaration ដែលណែនាំពីអត្តសញ្ញាណ ទៅក្នុង កម្មវិធីដូចជាអ្នកនិងរៀនពេលឥឡូវនេះ។ បង្កើត Local Scope ជាមួយ Method នៅខាងឆ្វេង និងស្តាំដៃដែល form នៃ method បង្កើត scope មួយ ។ អថេរខ្លះអ្នក declare នៅផ្នែកខាងក្នុង body នៃ method មួយ។ អថេរទាំងនេះត្រូវបានហៅថាជា local variableព្រោះវាតាំងនៅ  method ដែលវាត្រូវបានប្រកាស; វាមិនមាននៅក្នុង scope ក្នុង method ផ្សេងទៀត ។ ការរៀបចំ ជាមធ្យោបាយដែលអ្នកមិនអាចប្រើ  local variable ដើម្បីចែកចាយពត៌មានរវាង methods ។ ឧទាហរណ៍:

class Example

{

void firstMethod()

{

int myVar;

}

void anotherMethod()

{

myVar = 42; // error – variable not in scope

}

}

        បង្កើត Class Scope ជាមួយ Class

នៅខាងឆ្វេងនិងស្តាំដៃដែលមាន form body នៃ class មួយដែល បង្កើត scope មួយ ។ អថេរ “variables” ខ្លះអ្នកប្រកាស declare នៅខាង ក្រៅ body នៃ class (ប៉ុន្តែមិននៅខាងក្រៅ method) ត្រូវបាន scope ទៅក្នុង class ។ ដូចជាយើងបានមើលឃើញក្នុងជំពូកទីពីឈ្មោះ C# name សំរាប់អថេរទាំងនេះគឺជាបណ្តា fields ។

class Example

{

void firstMethod()

{

myField = 42; // ok

}

void anotherMethod()

{

myField = 42; // ok

}

int myField = 0;

}

Overloading Identifier

ក្នុង WritLine method នៃ Console class គឺជាឧទាហរណ៍ដ៏ប្រសើរនៃ overloading ។ ប្រសិនបើអ្នកចង់សរសេរ string ទៅ console អ្នកផ្ញើ string argument មួយទៅអោយ WriteLine និង WriteLine(string s) គឺ ត្រូវបានហៅដោយ automatically ។ ប្រសិនបើអ្នកចងសរសេរ int ទៅ console អ្នកផ្ញើ int argument មួយទៅ WriteLine និង WriteLine(int i) គឺហៅ automatically ។ ម្តងទៀត compiler sorts ចេញក្រៅមើលពិស្តារ សំរាប់អ្នក ។ ក្នុងពេល compiler មើលប្រភេទនៃ arguments ដែលអ្នកកំពុង ផ្ញើចូលក្នុងរួចហើយហៅ version នៃឈ្មោះ method ដែលបានផ្គុំបង្កើត parameters ឧទាហរណ៍:

static void Main()

{

Console.WriteLine(“The answer is “);

Console.WriteLine(42);

}

4. សរសេរនិងហៅ  Method ក្នុងលំហាត់ខាងក្រោមអ្នកនឹងឃើញពីការប្រើ C# Method Wizard សំរាប់ជំនួយអោយអ្នកសរសេរ methods ខ្លះដែលគណនា របៀបជំនួយនឹងផ្ទុក សំរាប់ផ្តល់ចំនួននៃ days ដែលតំលៃមិនប្រែប្រួលរៀងរាល់ថ្ងៃ ។ បន្ទាប់មកអ្នក នឹងរត់ដំណើរការ methods ក្នុងការប្រើប្រាស់ console application ដើម្បី a ស្គាល់កម្មវិធី ។ ចុចបញ្ចប់ អ្នកនឹងប្រើ Visual Studio .NET សំរាប់ធ្វើជា debug ។ សរសេរ method មួយដែលប្រើ C# Method Wizard

1. នៅលើ File menu ចូល Open រួចចុចលើ Project ។ បើកប្រអប់ Open Project dialog box ។

2. ក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 3\DailyRate folder ក្នុង My Documents folder របស់អ្នកបើក DailyRate project ។
a

3. នៅ View menu ចុចលើ Class View ។ ក្នុង Class View មានសន្លឹកបង្ហាញ ។

4. ក្នុងសន្លឹក Class View window ចុចលើសញ្ញា + នៅខាងឆ្វេងដៃ នៃ DailyRate ។ ពេលនោះឈ្មោះ DailyRate namespace បង្ហាញ។

5. ក្នុងសន្លឹក Class View ចុចលើសញ្ញា + នៅខាងឆ្វេងដៃនៃ { } DailyRate ។ ពេលនោះ Class1 បានបង្ហាញ
a

6. ក្នុងសន្លឹក Class View ចុចលើ right-click Class1 ។

menuនឹង បញ្ហា

7. នៅលើ menu ចូលក្នុង Add រួចចុចលើ Add Method ។ កម្មវិធី C# Method Wizard បើកបង្ហាញ ។
a

8. ជ្រើសរើសពីរដងពី Return Type list ។

9. វាយសរសេរ readDouble ក្នុងប្រអប់ Method Name ។

10. ជ្រើសរើស string ពី Parameter Type list ។

11. វាយសរសេរ prompt ក្នុងប្រអប់ឈ្មោះ Parameter Name រួចចុចលើ Add ។

12. ចុចលើ Finish ។ កម្មវិធី C# Method Wizard បិទឡើងវិញនិង

មាន method declaration បង្ហាញក្នុង Code pane:

private double readDouble(string p)

{

throw new Exception(“The method or operation is not implemented.”);

}

13. លុប Delete statement និងបញ្ចូល statements ដូចខាងក្រោម ចូលក្នុង readDouble method:

Console.Write(prompt);

string line = Console.ReadLine();

return double.Parse(line);

14.​ នៅលើ Build menu ចុចលើ Build Solution

15. កំណត់ឡើងវិញ readDouble method អ្នកបានបង្កើត compiles ដោយគ្មាន error ។

សរសេរ methods ដែលនៅសេសសល់

  1. ប្រើ C# Method Wizard ដើម្បីបង្កើត method ផ្សេងទៀតដែល ប្រើដូចខាងក្រោមនេះ:
Control name Setting
Return type int
Method name readInt
Parameter type string
Parameter name prompt

2.​ចុចលើ Finish កម្មវិធី C# Method Wizard បិទឡើងវិញរួចហើយ ជំហានបន្ទាប់ method declaration បង្ហាញក្នុង Code pane:

public int readInt(string prompt)

{

return? 0;

}

3. លុប return statement វាយសរសេរ statements ដូចខាងក្រោម ក្នុង readInt method:

Console.Write(prompt);

string line= Console.ReadLine();

return int.Parse(line);

4. លើ Build menu ចុចលើ Build Solution

5. ដូចពីមុន កំណត់ឡើងវិញ readInt method ដែលអ្នកបានប្រកាស compiles ដោយគ្មាន error ។

6. ប្រើកម្មវិធី C# Method Wizard ដើម្បីបង្កើត method ផ្សេងទៀត ដោយប្រើ settings ដូចខាងក្រោមនេះ (អ្នកនឹងត្រូវការចុចលើ Add បន្ទាប់ពីបង្កើត parameter នីមួយៗ)។

Control name Setting
Return type double
Method name calculateFee
Parameter type double
Parameter name dailyRate
Parameter type int
Parameter name noOfDays
Control name Setting

7. ចុចលើ Click Finish កម្មវិធី The C# Method Wizard បិទឡើង វិញ method declaration បង្ហាញក្នុង Code pane:

public doublecalculateFee(double dailyRate,int noOfDays)

{

return? 0;

}

8. ប្តូរ return statement ដើម្បីគណនាតំលៃបង្ហាញនៅទីនេះ:

return dailyRate * noOfDays;

9. នៅលើ Build menu ចុចលើ Build Solution ។

10. កំណត់តំលៃគណនាឡើងវិញ calculateFee method អ្នកបាន compiles ដោយគ្មាន error ។

11. ប្រើកម្មវិធី C# Method Wizard ដើម្បីបង្កើត method ផ្សេងទៀត ដោយប្រើ settings ដូចខាងក្រោម:

Control name Setting
Return type void
Method name writeFee
Parameter type double
Parameter name fee
Control name Setting

12. ចុចលើ Click Finish កម្មវិធី The C# Method Wizard បិទឡើង វិញ method declaration នឹងបង្ហាញ Code pane:

public void writeFee(double fee)

{

}

13. វាយសរសេរ statements ខាងក្រោមក្នុង writeFee method:

Console.WriteLine(“The consultant’s fee is:? {0}”,fee * 1.1);

14. នៅលើ Build menu ចុចលើ Build Solution

15. កំណត់ឡើងវិញ writeFee method អ្នកបានប្រកាស declared compiles ដោយគ្មាន error ។

ហៅ method​ និងរត់ដំណើរការកម្មវិធី program

1. នៅក្នុង Code pane ទីតាំង run method ។

2. វាយសរសេរបន្តបន្ទាប់ statements នៅខាងក្នុង run method:

double dailyRate = readDouble(“Enter your daily rate: “);

int noOfDays =readInt(“Enter the number of days:”);

writeFee(calculateFee(dailyRate, noOfDays));

3. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ ពេលនោះ Visual Studio .NET builds កម្មវិធីខណ:នោះរត់វា ក្នុង console ដែលបង្ហាញ ។

4. បញ្ចូល Enter Daily Rate prompt របស់អ្នកវាយសរសេរ 525 រួចហើយចុចលើ Enter។

5. បញ្ចូល Number Of Days prompt វាយសរសេរ 17 រួចចុចលើ Enter កម្មវិធីសរសេរ message ដូចខាងក្រោមនេះទៅសន្លឹកconsole

The consultant’s fee is: 9817.5

Press any key to continue

6. ចុចលើ key ដើម្បីត្រឡប់ return control ទៅ Visual Studio .NET programming environment ។

ក្នុងពេលដែលអ្នកធ្វើដោយជំហានៗចេញពី methods អ្នកនឹងប្រើ tools លើ Debug toolbar ។ ពេលនោះ Debug toolbar នឹងបង្ហាញដោយ automatically កាលណាអ្នក debug កម្មវិធី ។ ប្រសិនបើ toolbar មិនបង្ហាញ អ្នកអាចមើល display វាដោយចុចលើ Toolbars លើ View menu និងចុច

លើ Debug ។

1. ក្នុង Code pane រកមើល run method ។

2. ប្តូរ mouse pointer ទៅ statement​ទី1 ក្នុង run method ។ ដែល statement ទីមួយ នៅក្នុង run method គឺដូចខាងក្រោម:

Double dailyRate = readDouble(“Enter your daily rate: “);

ចុចលើ Right-click កន្លែងណាមួយលើបន្ទាត់នេះ។

3. នៅលើ pop-up menu ចុចលើ Run ទៅ Cursor ។ កម្មវិធី រត់ដំណើរការទៅ statement នៅខាងក្រោម cursor ។

4. នៅលើ View menu​ ចុចលើ Toolbars រួចចុចលើ Debug (ប្រសិន បើវាមិនមានរួចស្រេចដែលបានជ្រើសរើស) Debug toolbar បើកឡើង

Debug toolbar អាចបង្ហាញជាមួយ toolbars ផ្សេងទៀតអ្នកមិនអាច មើល toolbar ព្យាយាមដកការជ្រើសរើសចេញពីវាដែលប្រើToolbars command លើ View menu រួចចាំថាប៊ូតុងដែលមិនបង្ហាញកាលណា

display toolbar ម្តងទៀត ។

5. នៅលើ Debug toolbar ចុចលើ Step Into ។ បន្ទាប់ឃើញ cursor ពណ៌លឿងលោតចុះឡើងទៅក្នុង statement ទីមួយ

readDouble method ។

6. នៅលើ Debug toolbar ចុចលើ Step Out ។ កម្មវិធី displays បញ្ចូល Daily Rate prompt របស់អ្នកក្នុងសន្លឹក console ។

7. វាយសរសេរ 525 ក្នុងសន្លឹក console រួចហើយពេលនោះចុចលើ Enter ។ Control ត្រឡប់ទៅ Visual Studio.NET programming (អ្នកអាចត្រូវការដើម្បីចុចលើ Visual Studio .NET ដើម្បីនាំវាទៅ foreground)។

8. នៅលើ Debug toolbar ចុចលើ Step Into ។ ដែលមាន cursor ពណ៌លឿងប្តូរទៅក្នុង statement ទីពីរ run method:

int noOfDays? = readInt(“Enter the number of days: “);

9. នៅលើ Debug toolbar ចុចលើ Step Into ។ នៅលើ cursor ពណ៌លឿងលោតចុះឡើងទៅក្នុង statement ទីមួយនៃ readInt method ។

10. នៅលើ Debug toolbar ចុចលើ Step Out ។ កម្មវិធី displays លេចឡើងបញ្ចូល Number Of Days prompt ក្នុងសន្លឹក console។

11. វាយសរសេរ 17 រួចចុចលើ Enter ។  Control ត្រឡប់ទៅ Visual Studio .NET programming environment. ។

12. នៅលើ Debug toolbar ចុចលើ Step Into ។ ពេលនោះ cursor ពណ៌លឿងប្តូរទៅ statement ទីបីនៃ run method:

writeFee(calculateFee(dailyRate,? noOfDays));

13. នៅលើ Debug toolbar ចុចលើ Step Into ។ លើ cursor ពណ៌

លឿងលោតចុះឡើងទៅក្នុង statement ទីមួយនៃ calculateFee method ។

14. នៅលើ Debug toolbar ចុចលើ Step Out ។ លើ cursor ពណ៌ លឿងលោតចុះឡើងត្រឡប់ទៅ statement ទីបីវិញ run method ។

15. នៅលើ Debug toolbar ចុចលើ Step Into លើ cursor ពណ៌លឿងលោតចុះឡើងទៅក្នុង statement ទីមួយនៃ writeFee method ។

16. នៅលើ Debug toolbar ចុចលើ Step Out ។ លើ cursor ពណ៌​លឿងលោតចុះឡើងបិទក្នុងពេលបញ្ចប់ run method ។ ក្នុងសន្លឹក console window កម្មវិធី displays មើលតំលៃជំនួយ ។ ដែល

បង្ហាញដូចខាងក្រោមនេះ:
a

មេរៀនទី៤: ប្រើ Decision Statement

មេរៀនទី៤: ប្រើ Decision Statement

ជំពូកនេះអ្នកនឹងរៀនពីរបៀប:

-ប្រើប្រមាណវិធី Boolean ដើម្បីបង្កើតកន្សោម expressions ដែលមានលទ្ធផលជាតំលៃ true ឬ false.

– សរសេរ if statements ដើម្បីអនុវត្តសំរេចធ្វើជ្រើសរើសលើ

លទ្ធផលនៃកន្សោម Boolean expression ។

-សរសេរ switch statements ដើម្បីអនុវត្តការងារសំរេចជ្រើសរើស

1.  ប្រកាសអថេរ  logic (bool Variable)

លើពិភពលោក programming (មិនដូចពិភពលោកពិត) គ្រប់សឬខ្មៅ ត្រូវ ឬខុស ។ ឧទាហរណ៍ ប្រសិនបើអ្នកបង្កើតអថេរលេចគត់ដែលហៅថា x ផ្តល់អោយតំលៃ 99 ទៅ x រួចហើយស្នើរសុំ “ធ្វើតំលៃ x ផ្ទុកតំលៃ 99” ចំលើយ ពិតប្រាកដ៏ true ។ ប្រសិនបើអ្នកស្នើរ “គឺ x តូចជា 10” ចំលើយពិត false ។ ក្នុងឧទាហរណ៍ កន្សោម Boolean expression។ កន្សោម Boolean expression តែងតែជា true ឬ false ។ ក្នុង Microsoft Visual C# មាន ជាដំបូងប្រភេទ data ដែលហៅ bool ដែលអ្នក ប្រើដើម្បីប្រកាសអថេរ declare variables ដែលវាយតំលៃទាំងពីរ true ឬ false ។ អ្នកអាច ផ្តល់តំលៃទៅអថេរ logic bool ដែលប្រើ keywords true និង false ។ ឧទាហរណ៍ ខាងក្រោម

នេះមានបី statements ប្រកាសអថេរ bool ដែលហៅថាផ្តល់អោយតំលៃពិត រួចស្រេច true ទៅអថេររួចហើយសរសេរវាទៅក្នុង console:

bool areYouReady;

areYouReady = true;

Console.WriteLine(areYouReady); // writes True

2. ប្រើប្រាស់ប្រមាណវិធី Boolean ប្រមាណវិធី logic Boolean គឺជាប្រមាណវិធីមានលទ្ធផលគឺ true ឬ false ។ ក្នុងកម្មវិធី C# មានប្រមាណវិធី logic  Boolean ដែលច្រើនប្រើ។ ប្រមាណវិធី logic Boolean គឺជាប្រមាណឆ្នាប់ NOT (បដិសេធន៍) ប្រើសំរាប់ បង្ហាញសញ្ញា (!) ។ អ្នកអនុវត្ត ប្រមាណវិធី នេះ logic Boolean ផ្តល់អោយតំលៃ ទោលរួចវាយតំលៃហើយវាបដិសេធន៍តំលៃរបស់វា ។ ម្យ៉ាងទៀត !false គឺ true និង !true គឺជា false ។

ស្វែងយល់ប្រមាណវិធី (Equality) និងទំនាក់ទំនង (Relational)

បណ្តាប្រមាណវិធីដែលច្រើនប្រើជាងគេមានពីរប្រមាណវិធីដោយប្រើ ដែលប្រើប្រមាណវិធី logic Boolean គឺជា (equality) និង (inequality) ។ អ្នកប្រើប្រមាណវិធីទាំង ពីរខាងលើនេះ ដើម្បីរកមើលតំលៃស្មើរជាមួយតំលៃផ្សេង ទៀតដែលដូចនឹងប្រភេទនេះឬយ៉ាងណា។ ទំនាក់ ទំនងជាមួយពីរប្រមាណវិធីគឺ ជាប្រមាណវិធីទំនាក់ទំនង (relational) ។ អ្នកប្រើប្រមាណ វិធី ទំនាក់ទំនង relational ដើម្បីរកមើលតំលៃ មួយដែលតូច ជាឬធំជាងតំលៃមួយខុសពីប្រភេទ

ឬបែបណា ។

បណ្តាប្រមាណវិធី operator ដែលប្រើក្នុងអថេរ int ដែលហៅថា age

ប្រមាណវិធី

មានន័យ

ឧទាហរណ៍

ឡូស៊ីច

តម្លៃស្មើរ

age — 100

false

!=

age != 0

true

C# ប្រើនិមិត្មសញ្ញាអោយបណ្តាប្រមាណវិធីនិងប្រមាណវិធីទំនាក់ទំនងដែល បង្ហាញ ក្នុងតារាងខាងក្រោម:

ប្រមាណវិធី

មានន័យ

ឧទាហរណ៍

ឡូស៊ីច

<

តូចជាង

age < 21 false
<=

តូចជាងឬស្មើរ

age <= 18 false
>

ធំជាង

age > 16 true
>=

ធំជាងឬស្មើរ

age >= 30 true

ស្វែងយល់បណ្តាប្រមាណវិធី  Logic

C# បានផ្គត់ផ្គង់ពីរប្រមាណវិធី logic Boolean: ប្រមាណវិធី logic AND ដែលប្រើនិមិន្មសញ្ញា ||  symbol ហើយនិងប្រមាណវិធី logic OR ដែលប្រើ ||

គោលបំណងនៃប្រមាណវិធីទាំងនេះគឺផ្សំជាមួយ កន្សោម logic Boolean រួមជាមួយកន្សោមធំជាង ។ បណ្តាប្រមាណវិធីទាំងពីរដែលសមមូលនឹង បណ្តាប្រមាណវិធីដោយប្រើប្រមាណវិធីទំនាក់ទំនងមានលទ្ធផលត្រូវ true ឬ false ប៉ុន្តែខុសពីតំលៃរួមអនុវត្តជាក់ស្តែងរបស់វានឹង មានតំលៃ True និងមានតំលៃ false ។ លទ្ធផលនៃប្រមាណវិធី && គឺ true ប្រសិនបើ ទាំងពីរកន្សោមប្រមាណវិធី logic Boolean វាជាប្រមាណវិធីគឺជា true ។ ប្រើ ប្រមាណវិធី && operator ដើម្បីសំរេចធ្វើការផ្សំជាមួយកន្សោម

ប្រមាណវិធី logic Boolean expressions គឺជា true ។ ឧទាហរណ៍ ខាងក្រោមនេះជា statement ដែលផ្តល់តំលៃ true ទៅក្នុង validPercentage ប្រសិនបើ តំលៃនៃភាគរយធំជាងឬស្មើរ zero និងតំលៃភាគរយតូចជាងឬស្មើ 100:

bool validPercentage;

validPercentage = (percent >= 0)&& (percent <= 100);

គ្រប់កំហុស error ដែលតែងតែកើតមានឡើងដើម្បីព្យាយាមផ្គុំជាមួយ  ពីរតែស tests ដែលឈ្មោះភាគរយអថេរគឺមានតែមួយដូចនេះ :

percent >= 0 && <= 100 // error មិនអាច compile បាន

លទ្ធផលនៃប្រមាណវិធី │┠គឺជា true ប្រសិនបើកន្សោមនៃប្រមាណ វិធី logic Boolean វាជាប្រមាណវិធីគឺជា true ។ អ្នកប្រើប្រមាណវិធី ││ ដើម្បីសំរេចធ្វើផ្គុំជាមួយកន្សោម Boolean គឺជា true ។ ឧទាហរណ៍ ខាងក្រោមនេះ statement ផ្តល់តំលៃ true ទៅអោយ invalidPercentage ប្រសិនតំលៃនៃភាគរយគឺតូចជាង zero ឬតំលៃភាគរយធំជាង 100:

bool invalidPercentage;

invalidPercentage = (percent < 0) || (percent > 100);

 3. Short Circuiting

ប្រមាណវិធី && និង || ទាំងពីរនេះមានលក្ខណ:ពិសេសគឺហៅថា short circuiting ។ ជួនពេលខ្លះលទ្ធផលនៃ && និង || ប្រមាណវិធី សំរេចធ្វើពីឆ្វេងនៃប្រមាណវិធី left-side Boolean ។ ក្នុងករណីនេះប្រមាណវិធី && និង || នឹងបោះបង់ចោលតំលៃកន្សោម right-side Boolean ។ ឧទាហរណ៍: (percent >= 0) && (percent <= 100)

ក្នុងកន្សោមប្រសិនបើតំលៃនៃភាគរយគឺតូចជាង zero កន្សោម Boolean នៅលើ left side នៃ && តំលៃទៅ false ។ តំលៃនេះមានន័យថា ជាលទ្ធផលនៃកន្សោមទាំងអស់ត្រូវតែ false នៃកន្សោមដែលនៅសេសសល់

ដូច្នេះកន្សោម logic Boolean នៅលើ right side នៃ && គឺមិនមានតំលៃ ។

(percent< 0) ||  percent> 100)

តារាងខាងក្រោមនេះសង្ខេបពីការបញ្ចូលគ្នា (associativity) នៃ ប្រមាណវិធីទាំងអស់ដែលអ្នកបានរៀនពីមុន ។

ផ្នែក ប្រមាណ ការពិណ៌នា រួបរួម
Primary ( ) Precedence override Left
Unary ! NOT Left
Multiplicative */

%

 

Multiply Divide Divisionremainder

 

Left
Additive  +-

<

 

Addition Subtraction  left
Relational  <=>

>=

 

Less than Less than orequal Greater than

Greater than or equal

 

Left
Equality  ==!=

 

Equal to Not equal to Left
Boolean  &&||

 

Logical AND LogicalOR

 

left
Assignment  Right 

តម្លៃកន្សោមខាងស្តាំ Boolean

(percent >= 0) && (percent <= 100)

តម្លៃកន្សោមនៃខាងស្តាំនៃ && Boolean

(percent < 0) || (percent > 100)

4. ការប្រតិ្តបត្តិ if Statement

អ្នកប្រើ if statement កាលណាអ្នកចង់បានប្រត្តិបត្តិមួយឬច្រើន statements កាលណាលទ្ធផលនៃកន្សោម Boolean គឺជា true ។ អ្នកអាចប្រើ ស្រេចលើអនុប្រយោគ កាលណាលទ្ធផលនៃកន្សោម Boolean គឺជា false ។ ស្វែងយល់ពី if Statement Syntax ។ syntax នៃ if statement គឺបង្ហាញ ខាងក្រោមនេះ:

if ( booleanExpression )

statement-1;

else

statement-2;

ប្រសិនបើកន្សោម boolean Expression តំលៃ true ពេលនោះ statement-1 ដំណើរការ ម្យ៉ាងទៀតកន្សោម booleanExpression គឺ false

និង statement-2 ដំណើរការ ។ ពីពាក្ស else និង statement-2 ខាងក្រោម ប្រសិនបើមិនមាន else​  មិនមានបញ្ហាអ្វីកើតមានឡើងកាលណាកន្សោម booleanExpression គឺជា false ។ ឧទាហរណ៍ if statement ដែល បង្កើនចំនួនវិនាទីរបស់នាឡិកា(នាទីដែលបោះបង់ចោល):

int seconds;

if (seconds == 59)

seconds = 0;

else

seconds++;

5. បង្ហាញកន្សោម logic Boolean កន្សោមក្នុង if statement ត្រូវប្រើក្នុងសញ្ញាវង់ក្រចក ។ បន្ថែមក្នុងនោះ កន្សោមនោះត្រូវតែជាកន្សោម logic ។  មានភាសាសរសេរផ្សេង (ដូចជា C និង C++) អនុញ្ញាតអោយអ្នកសរសេរកន្សោមមួយចំនួនគត់និងប្តូរ convert តំលៃ ចំនួនគត់ទៅជា true (nonzero) ឬ false (zero) ។ ក្នុង C# មិនធ្វើដូច្នេះ

ប្រសិនបើអ្នកសរសេរ if statementមួយនិងដោយចៃដន្យសរសេរកិច្ចការជំនួស

equality test ។ C# compiler នឹងទទួលស្គាល់ពីកំហុសរបស់អ្នក ឧទាហរណ៍

int seconds;

if (seconds = 59) // compile-time error

if (seconds == 59) // ok

ប្រើ Blocks ទៅក្នុង Group Statements ពេលខ្លះអ្នកនឹងចង់បានដើម្បីរត់ពីរឬច្រើន statements កាលណា កន្សោម Boolean គឺជា true ។ អ្នកនឹងមាន group statements នៅក្នុង method ថ្មីរួចហើយហៅ method ថ្មីប៉ុន្តែមានដំណោះស្រាយសាមញ្ញាគឺ បញ្ចូលទៅក្នុង group statements ក្នុង block ។ ក្នុងឧទាហរណ៍ខាងក្រោមនេះ ដែលធ្វើ កិច្ចការជាមួយ statements ត្រូវបានបញ្ចូលទៅក្នុង groupe ក្នុង block និង block ទាំងមូលរត់ដំណើរការ ប្រសិនបើតំលៃ នៃវិនាទីគឺស្មើរនិង 59:

int seconds;

int seconds = 0;

int minutes = 0;

if (seconds == 59)

{

seconds = 0;

minutes++;

}

else

seconds++;

if  Statement អ្នកអាចប្រើ if statements ទៅក្នុង if statements ផ្សេងទៀត ។ ក្នុង មធ្យោបាយនេះ អ្នកអាចចង់បញ្ចូលទៅកន្សោម Boolean ។ ពេលតែសឡើង វិញបន្ទាប់ពី កន្សោមផ្សេងទៀតមានតំលៃ true ។ ក្នុងឧទាហរណ៍ខាងក្រោមនេះ ប្រសិនបើតំលៃនៃថ្ងៃ គឺ 0 ការតែ សលើកទី1 គឺតំលៃ true និងឈ្មោះ dayName ត្រូវបានផ្តល់ Sunday ។ ប្រសិនបើតំលៃនៃថ្ងៃ មិនមែន 0 ការតែសលើកដំបូង បរាជ័យនិង control ផ្្ញើទៅប្រយោគផ្សេងទៀត ដែលអ្នករត់និង if statement ទីពីររួចហើយប្រៀបធៀបតំលៃថ្ងៃជាមួយនិង 1 ។  if statement ទីពីរគឺមកដល់ if  តែសលើកទីមួយគឺ false។

if (day == 0)

dayName = “Sunday”;

else if (day == 1)

dayName = “Monday”;

else if (day == 2)

dayName = “Tuesday”;

else if (day == 3)

dayName = “Wednesday”;

else if (day == 4)

dayName = “Thursday”;

else if (day == 5)

dayName = “Friday”;

else if (day == 6)

dayName = “Saturday”;

else

dayName = “unknown”;

text បង្ហាញក្នុងប្រអប់ text box:

first == second : False

first != second : True

first < second : False

first <= second : False

first > second : True

first >= second : True

aCode បង្ហាញសំរាប់ Form1.cs ក្នុង Code និងសន្លឹក Text Editor ចុចលើទីតាំង compare_Click:

int diff = dateCompare(first.Value, second.Value);

info.Text = “”;

show(“first == second”, diff == 0);

show(“first != second”, diff != 0);

show(“first < second”, diff < 0);

show(“first <= second”, diff <= 0);

show(“first > second”, diff > 0);

show(“first >= second”, diff >= 0);

}

ប្រភេទ statements នៃា dateCompare method:

int result;

if (leftHandSide.Year < rightHandSide.Year)

result = -1;

else if (leftHandSide.Year > rightHandSide.Year)

result = +1;

else if (leftHandSide.Month < rightHandSide.Month)

result = -1;

else if (leftHandSide.Month > rightHandSide.Month)

result = +1;

else if (leftHandSide.Day < rightHandSide.Day)

result = -1;

else if (leftHandSide.Day > rightHandSide.Day)

result = +1;

else

result = 0;

return result;

ក្នុងលំហាត់ខាងក្រោមនេះអ្នកនឹងសរសេរ method ដែលប្រើ if statement ដើម្បីប្រៀបធៀបកាលបរិច្ឆ័ទពីរ

សរសេរ if statements

1. ចាប់ផ្តើមចូលក្នុង Microsoft Visual Studio .NET ។

2. លើ File menu -> ចូលក្នុង Open-> ចុចលើ Project ។ បើប្រអប់ Open Project dialog box ។
3. បើកជ្រើសរើស project ដែលមានទីតាំងក្នុង \Microsoft Press\Visual C# Step by Step\Chapter4\ការជ្រើសរើស folder ក្នុង My Documents folder របស់អ្នកការជ្រើសរើស project បើកក្នុង programming environment ។
a4. នៅលើ Debug menu ចុចលើ Start Without Debugging ។

ចំណាំ:  លើ keyboard shortcut ចាប់ផ្តើម Start Without Debugging គឺស្មើនឹងចុចលើ Ctrl+F5 ។ Visual Studio .NET នឹងសង់បង្កើតហើយរត់កម្ម

វិធីប្រើប្រាស់ ។ មានពីររបៀប DateTimePicker controls លើ form ដែលហៅថាទីមួយនិងទីពីរទាំងពីរនេះបង្កើតឡើងភ្លាមដូចខាងក្រោមនេះ:

5. ចុចលើ Compare

ខាងក្រោមនេះ text បង្ហាញក្នុង text box:

first == second : False

first != second : True

first < second : False

first <=second : False

first > second : True

first >= second : True

6. ចុចលើ Quit អ្នកត្រឡប់ទៅក្នុង Visual Studio .NE programming environment ។

7. ប្រើ Scroll ឆ្លតកាត់ Code pane និងទីតាំង dateCompare method ។  dateCompare method នឹងមានដូចជា:

private int dateCompare(DateTime lhs, DateTime rhs)

{

// TO DO

return 42;

}

អ្នកត្រូវដើម្បីអនុវត្តក្នុង method នេះដើម្បីប្រៀបធៀបត្រឹមត្រូវកាល

បរិច្ឆេទពីរសំរាប់ការអនុវត្តន៍ធ្វើការបានត្រឹមត្រូវ អ្នកត្រូវការដើម្បីអនុវត្តន៍

dateCompare ដែលបង្ហាញដូចខាងក្រោននេះ:

if lhs < rhs, then return any int value less than zero

if lhs == rhs, then return zero

if lhs > rhs, then return any int value greater than zero

8. លុបចោល // TODO និងត្រឡប់ទៅ statement ពីក្នុង dateCompare method.

9. វាយសរសេរ statements ខាងក្រោមនេះក្នុង body dateCompare method:

int result;

if (lhs.Year < rhs.Year)

result = -1;

else if (lhs.Year > rhs.Year)

result = +1;

else if (lhs.Month < rhs.Month)

result = -1;

else if (lhs.Month > rhs.Month)

result = +1;

else if (lhs.Day < rhs.Day)

result = -1;

else if (lhs.Day > rhs.Day)

result = +1;

else

result = 0;

return result;

9. ចាំថា ប្រសិនបើ lhs.Year < rhs.Year គឺជា false ហើយ

lhs.Year > rhs.Year គឺជា false ពេលនោះ lhs.Year == rhs.Year ត្រូវតែ true ហើយកម្មវិធីនឹងប្តូរត្រឹមត្រូវដើម្បីប្រៀប ធៀប Month property នៃ lhs និង rhs ។ ដូចគ្នាដែរប្រសិនបើ  lhs.Month < rhs.Month គឺជា false និង lhs.Month > rhs.Month គឺជា false ពេលនោះ lhs.Month == rhs.Month ត្រូវតែ true ហើយកម្មវិធីប្តូរយ៉ាង ត្រឹមត្រូវម្តង ទៀតដើម្បីប្រៀបធៀប Day property នៃ lhs និង rhs ។ ចុចក្រោយ ប្រសិនបើ lhs.Day < rhs.Day គឺជា false ហើយ lhs.Day> rhs.Day គឺជា false ពេលនោះ lhs.Day == rhs.Day ត្រូវតែ true ពីព្រោះ Month និង Year properties ត្រូវតែ true ផងដែរកាលបរិច្ឆេទត្រូវតែដូចគ្នា ។
10. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ ការប្រើប្រាស់ត្រូវបានសង់បង្កើតឡើងវិញនិង restart ឡើងវិញ ។

កាលបរិច្ឆ័ទពីរ DateTimePicker controls ទីមួយនិងទីពីរគឺជាការ

បង្កើតកាលបរិច្ឆ័ទសព្វថ្ងៃ ។

11. ចុចលើ Compare បន្ទាប់មក text បង្ហាញក្នុងប្រអប់ text box:

first == second : True

first != second : False

first <  second : False

first <= second : True

first >  second : False

first >= second : True

These are the correct answers.

12. ប្តូរ DateTimePicker control ទីពីរក្នុង tomorrow’s date។

13. ចុចលើ Compare បន្ទាប់មក text បង្ហាញក្នុងប្រអប់ text box:

first == second : False

first != second : True

first <  second : True

first <= second : True

first >  second : False

first >= second : False

13. These are the correct answers.

14. ចុចលើ Quit. ដើម្បីត្រឡប់ទៅកម្មវិធី Visual Studio .NET

6. ប្រើប្រាស់ switch Statement កាលណាអ្នកសរសេរ if statement ជួនពេលខ្លះរក if statements ទាំងអស់មើលទៅប្រហាក់ប្រហែលគ្នា ; វាទាំងអស់មានតំលៃក្នុងកន្សោមវាគ្រាន់ តែមានភាពខុសគ្នាដែល if នីមួយៗប្រៀបធៀបលទ្ធផលនៃកន្សោមបី ជាមួយតំលៃខុសៗ គ្នាឧទាហរណ៍:

if (day == 0)

dayName = “Sunday”;

else if (day == 1)

dayName = “Monday”;

else if (day == 2)

dayName = “Tuesday”;

else if (day == 3)

else

dayName = “Unknown”;

ក្នុងស្ថានភាពនេះអ្នកតែងតែសរសេរឡើងវិញ if statements ដូចជា switch statement ដើម្បីបង្កើតកម្មវិធីរបស់អ្នកដែលមានលទ្ធផលល្អប្រសើរ ជួនពេលខ្លះវាមានលទ្ធភាពដើម្បីសរសេរ ឡើងវិញ if statement ដោយប្រើ arrays ។

ស្វែងយល់ switch Statement Syntax syntax នៃ switch statement គឺមានដូចខាងក្រោមនេះ (switch, case និង default គឺជា keywords):

switch ( controllingExpression )

{

case constantExpression :

statements

break;

case constantExpression :

statements

break;

default :

statements

break;

}

<controllingExpression> គឺជាតំលៃមួយនិង statements ខាង

ក្រោមនេះ case ដែលមានក្នុងតំលៃ constantExpression គឺស្មើលទ្ធផលនៃ <controllingExpression> ។  switch statement ពេលដែលបញ្ចប់ហើយ កម្មវិធីបន្តក្នុង statement ទីមួយបន្ទាប់មកបិទ switch statement ។

ប្រសិនបើតំលៃនៃ constantExpression ស្មើនឹងតំលៃនៃcontrolling Expression នោះ statements នៅក្រោម optional default : រត់ដំណើរការ error មិនមានលទ្ធផលប្រសិនបើតំលៃនៃ controlling expression មិនធ្វើ

ការផ្សំជាមួយ case labels និងមិនមាន default label ។

switch (day)

{

case 0 :

dayName = “Sunday”;

break;

case 1 :

dayName = “Monday”;

break;

case 2 :

dayName = “Tuesday”;

break;

default :

dayName = “Unknown”;

break;

}

ខាងក្រោមនេះជាតួនាទី switch Statement switch statements គឺគេនិយមប្រើប៉ុន្តែមិនជោគជ័យអ្នកមិនអាចប្រើ វាកាលណាអ្នកអាចធ្វើបានដូច្នោះ ។ switch statements របស់អ្នកត្រូវតែ មានជាប់តួនាទីដូចខាងក្រោម:

· អ្នកអាចប្រើ switch គ្រាន់តែលើប្រភេទ primitive data (ដូចជា int) និង string ។ ប្រសិនបើអ្នកត្រូវការប្រើ switch ជាមួយប្រភេទផ្សេងទៀត អ្នកនឹងអាចប្រើ if statement. ។

· ក្នុង case labels របស់អ្នកត្រូវតែជាកន្សោមថេរដូចជា 42 ឬ”42″ ប្រសិនបើអ្នកត្រូវការគណនាតំលៃ case label របស់អ្នករត់ដំណើរការក្នុងពេល ណាមួយ អ្នកនឹងអាចប្រើ if statement ។

· ក្នុង case labels របស់អ្នកត្រូវតែជាកន្សោមមានតែមួយគត់ ម្យ៉ាង

ទៀតអ្នកមិនអាចអនុញ្ញាតដើម្បីសរសេរក្នុងពីរ case labels ជាមួយតំលៃដូចគ្នា

· អ្នកត្រូវតែធ្វើឡើងវិញក្នុង case label syntax សំរាប់តំលៃដោយ ឡែកប្រសិនបើអ្នកចង់បានដើម្បីរត់ដំណើរការ statements ដូចគ្នាជាមួយ

តំលៃច្រើនជាងមួយ ។ ឧទាហរណ៍:

switch (trumps)

{

case Hearts :

case Diamonds : // Fall-through allowed – no code between labels

color = “Red”; // Code executed for Hearts and Diamonds

break;

case Clubs :

color = “Black”;

case Spades : // Error – code between labels

color = “Black”;

7. ច្បាប់មិនសូវមានប្រើ (No Fall-Through)

តួនាទី No fall-through មានន័យថាអ្នកអាចរៀបចំឡើងវិញជា ផ្នែកនៃ switch statement ដោយគ្មានឥទ្ធិពលលើវា។ អ្នកសរសេរក្នុង C និង C++ គួរចាំថាការបំបែក statement គឺជាការចាំបាច់សំរាប់គ្រប់ករណីក្នុង switch statement (ក្នុងករណីប្រើ default) ។ សំណើរនេះគឺជាបញ្ហាល្អប្រសើ។ ក្នុង C# បញ្ហា fall-through គឺតែងតែជួបប្រទេះក្នុងពេល compile-time error ។ statement ចុងក្រោយនៃករណីផ្នែកមួយមិនអនុញ្ញាតអោយ fall through ចូលក្នុងករណីនេះ ។ បំបែក statement គឺជាមធ្យោបាយសាមញ្ញា ដើម្បីបញ្ឈប់ fall-through ប៉ុន្តែអ្នកអាចប្រើ return statement ឬបោះចោល statement ។

សរសេរ switch statement

1. ចាប់ផ្តើម Start Visual Studio .NET

2. លើ File menu-> ចូលក្នុង Open រួចចុចលើ Project ។ បើកប្រអប់ Open Project dialog box ។

3. បើក switchStatement project ដែលមានទីតាំងក្នុង\Microsoft Press\Visual C# Step by Step\Chapter 4\switchStatement folder ក្នុង My Documents folder ។

4. លើ Debug menu ចុចលើ Start Without Debugging ។ កម្មវិធី Visual Studio .NET សង់បង្កើតនិងរត់កម្មវិធីប្រើប្រាស់ ។ មានប្រអប់ text boxes ពីរដែលសំរាប់បែងចែកប៊ូតុង Copy ។
a5. ប្រភេទ statement ខាងក្រោមនៅលើប្រអប់ text box:

inRange =(lo<= number)&&(number<=hi);

6. ចុចលើ Copy ពេលនោះ statement ត្រូវបាន copied character-by-character ម្តងមួយៗទៅក្នុងប្រអប់ text box ខាងក្រោម ។

7. ចុចលើ Close ដើម្បីត្រឡប់ទៅកម្មវិធី Visual Studio .NET។

8. ប្រើ Scroll ឆ្លងកាត់ Code pane និងទីតាំង copyOne method រួច copy method មួយនិង character មួយទៀពីក្នុងប្រអប់ខាងលើ text box ទៅក្នុងប្រអប់ខាងក្រោម text box ។

8. ក្នុងជំហានពីរបីបន្ទាប់ទៀតអ្នកផ្លាស់ប្តូរ switch statement ដើម្បីប្តូរ characters ដែលសំខាមន់ក្នុង XML ទៅក្នុងផែនទី XML ឧទាហរណ៍ “<” character នឹងត្រូវបានប្តូរ string “&lt;”.

9. បន្ថែម Add statements បន្ទាប់មកទៅក្នុង switch statement។

case ‘<‘ :

target.Text += “&lt;”;

break;

case ‘>’ :

target.Text += “&gt;”;

break;

case ‘&’ :

target.Text += “&amp;”;

break;

case ‘\”‘ :

target.Text += “&#34;”;

break;

case ‘\” :

target.Text += “&#39;”;

break;

10. លើ Debug menu ចុចលើ Start Without Debugging ។  Visual Studio .NET​ សង់បង្កើតនិងរត់ដំណើរការកម្មវិធីប្រើប្រាស់។

11. វាយសរសេរ statement បន្ទាប់មកបញ្ចូលទៅក្នុងប្រអប់ខាងក្រោម text box:

inRange =(lo <= number)&&(number<= hi);

12. ចុចលើ Copy ពេលនោះ statement ត្រូវបាន copy ទៅក្នុង

ប្រអប់ខាងក្រោម text box ។ ពេលនេះ character នីមួយៗទទួល XML ដែលអនុវត្តក្នុង switch statement។

13. ចុចក្នុង Close អ្នកនឹងត្រឡប់ទៅកម្មវិធី Visual Studio .NET

សង្ខេបក្នុងជំពូកទី4

To ធ្វើដូចនេះ ឧទាហរណ៍
មើលប្រមាណវិធីif តំលៃពីរស្មើគ្នា ប្រើប្រមាណវិធី == ឬ != answer == 42
ប្រៀបធៀបទំហ៊ុំតំលៃពីរ ប្រើប្រមាណវិធី <, <=, >, >= Age >= 21
ប្រកាស Declare Boolean  ប្រើពាក្ស bool keyword ដូជាប្រភេទនៃអថេរ variable bool inRange; 
បង្កើតកន្សោម Boolean ដែលជា Trueប្រសិនបើពីរ លក្ខណះផ្សេង

ទៀតគឺជា true

 

Use the && operator  inRange = (lo <= number)&& (number <= hi);

 

បង្កើតកន្សោម Boolean ដែលជា Trueប្រសិនបើទាំងពីរ

នៃពីរលក្ខណះផ្សេង

ទៀតគឺជា true

ប្រើប្រមាណវិធី || 

 

outOfRange = (number < lo)|| (hi < number);

 

រត់ដំណើរការ Run statement ប្រសិន បើលក្ខណ:គឺជាtrue ប្រើ if statement  if (inRange)process();

 

រត់ដំណើរការ Run ច្រើនជាមួយ statement ប្រសិនគឺជាtrue ប្រើ switch statement  break;switch (current)

{

case ‘<‘:

break;

default :

break;

}

 

មេរៀនទី៥: ការប្រើ Statement

មេរៀនទី៥: ការប្រើ Statement

ក្នុងជំពូកនេះនឹងរៀនពីរបៀប:

– ប្រើប្រាស់បណ្តាប្រមាណវិធីសំរាប់ updating តំលៃអថេរ ។

– បង្កើននិងបញ្ចុះតំលៃនៃអថេរដោយប្រើប្រមាណវិធី ++ និង —

-សរសេរកន្សោម while, for និងធ្វើ statements រត់ដំណើរការ

ឡើងវិញមួយឬច្រើន statements។

-ជំហានបន្ទាប់មកឆ្លងកាត់ធ្វើ method និងមើលតំលៃនៃអថេរប្តូរ ។

1. ប្រើប្រាស់ប្រមាណវិធី Compound Assignment

អ្នកបានឃើញរួចរាល់ពីរបៀបបង្កើតតំលៃថ្មីដែលប្រលប្រមាណវិធី arithmetic ។ ឧទាហរណ៍ statement ខាងក្រោមប្រើជាមួយប្រមាណវិធី + ដើម្បីបង្កើត តំលៃគឺធំជាង 42 អថេរចំលើយ។ តំលៃថ្មីគឺត្រូវបានសរសេរក្នុង Console.WriteLine(answer + 42); អ្នកបានឃើញ ពីរបៀបប្រើ statements ដើម្បីប្តូរតំលៃក្នុងអថេរ ។ statement ខាងក្រោម ប្រើប្រមាណវិធីធ្វើដើម្បីប្តូរតំលៃនៃចំលើយ 42:

answer = 42;

ប្រសិនបើអ្នកចង់បានបន្ថែម 42 ទៅក្នុងតំលៃអថេរមួយអ្នកអាចផ្គុំប្រមាណវិធី និងការបន្ថែមប្រមាណវិធី ។ ឧទាហរណ៍ statement ខាងក្រោមបន្ថែម adds 42 ទៅក្នុងចំឡើយ ។ ម្យ៉ាងទៀតបន្ទាប់ពីរត់ statement តំលៃនៃចំលើយ គឺ 42 ច្រើនជាវាពីមុន:

answer = 42;

ទោះបីជា statement នេះធ្វការអ្នកនឹងមិនអាចមានលទ្ធភាពធ្វើ ប្រសិន បើគ្មានបទពិសោធន៍ក្នុងការសរសេរកម្មវិធី ។ បន្ថែមតំលៃទៅអថេរគឺជាការងាយ ស្រួលក្នុង ​Microsoft Visual C# អនុញ្ញាអោយអ្នកធ្វើវាដោយប្រើប្រមាណវិធី compound += ដើម្បីបន្ថែម 42 ទៅចំលើយ។

answer = answer + 42;

 

ឈ្មោះសំរាប់ប្រមាណវិធី += គឺជាប្រមាណវិធី compound ។ អ្នកអាចប្រើ shortcut ទៅផ្គុំ arithmetic operator ជាមួយប្រមាណវិធីដែល មានតារាងដូចខាងក្រោមនេះ:

មិនសរសេរបែបនេះ                            សរសេរបែបនេះ

variable = variable * number; variable *= number;

variable = variable / number; variable /= number;

variable = variable % number; variable %= number;

variable = variable + number; variable += number;

variable = variable – number; variable -= number;

ប្រយ័ត្ន

ប្រមាណវិធី *=, /=, %=, +=, និងប្រមាណវិធី -= ចែកចាយដូចជា ប្រមាណវិធីផ្សំផ្គុំសាមញ្ញាធម្មតា ។

ប្រមាណវិធី += ធ្វើការនៅលើ strings ផងដែរ ។ វាបន្ថែមលើ string ហើយបញ្ចប់ដោយផ្សេងទៀត ។ ឧទាហរណ៍ code ខាងក្រោមនេះនឹងបង្ហាញ “Hello John” នៅលើ console:

string name = “John”;

string greeting = “Hello “;

greeting += name;

Console.WriteLine(greeting);

2. សរសេរ while Statement

អ្នកប្រើ while statement ដើម្បីរត់ឡើងវិញក្នុង statement while ក្នុងកន្សោម Boolean ដែលនៅសល់ true ។  syntax នៃ while statement គឺជា: while ( booleanExpression )

statement

កន្សោម Boolean ត្រូវបានផ្តល់តំលៃហើយប្រសិនបើ true ពេល statement ដំណើរ ការកន្សោម Boolean ត្រូវបានវាយតំលៃម្តងទៀត ។ ប្រសិនបើកន្សោមនៅតែ  true នោះ statement ត្រូវធ្វើឡើងវិញនិងបង្ហាញតំលៃម្តងទៀត ។ ដំណើរការនេះបន្តទៅតំលៃកន្សោម Boolean ទៅ false កាលណា while statement បញ្ចប់ exits ។  while statement ចែកចាយ syntactic ជាច្រើនប្រហាក់ប្រហែលជាមួយ if statement (តាមពិត syntax គឺជា

អនុញ្ញាត សំរាប់ keyword):

· កន្សោម Boolean ត្រូវតែជាកន្សោម Boolean

· កន្សោម Boolean ត្រូវសរសេរក្នុងវង់ក្រចក parentheses ។

· ប្រសិនបើ កន្សោម Boolean តំលៃជា false កាលណាតំលៃទីមួយ statement និងមិនដំណើរការ។

· ប្រសិនបើអ្នកចង់បានដើម្បីផ្គុំពីរឬច្រើន statements ក្រោម control នៃ while statement អ្នកត្រូវមាន group statements ទាំងនោះក្នុង block ។

ទីនេះជា while statement ដែលសរសេរតំលៃ 0 ឆ្លងទៅ 9 ក្នុង console:

int i = 0;

while (i != 10)

{

Console.WriteLine(i);

i++;

}

ជ្រើសរើសបង្ហាញនៅលើ text box:
a

3. សរសេរfor Statement

មាន while statement ជាច្រើនដែលបង្ហាញ structure ទូទៅដូចខាង

ក្រោម:

initialization

while (Boolean expression)

{

statement

update control variable

}

ដើម្បី statement អនុញ្ញាតអោយអ្នកសរសេរជាមួយ formal version ធម្មតានៃប្រភេទ while statement ដោយផ្គុំ initialization កន្សោម Boolean និង update ។ អ្នកនឹងរកមើល statement ប្រើវាបង្កើតយ៉ាងលំបាកមិនបំភ្លេច បីផ្នែក ។ syntax នៃ statement គឺ:

for (initialization; Boolean expression; update control variable)

statement

 

អ្នកអាចលុចចោលបីផ្នែក statement ។ ប្រសិបើអ្នកលុបកន្សោម logic Boolean វា defaults ទៅ true ។ ខាងក្រោមនេះជា statement នឹង ដំណើរការជាប់ជានិច្ច:

for (int i = 0; i != 10; i++)

{

Console.WriteLine(i);

}

ប្រសិនបើអ្នកលុប initialization និងផ្នែក update part អ្នកប្រើ while loop

for (int i = 0; ;i++)

{

Console.WriteLine(“somebody stop me!”);

}

ក្នុង initialization កន្សោម logic boolean និង update ControlVariable ជាផ្នែកនៃ statement ត្រូវតែបែងចែកដែលមានសញ្ញា  semicolons ។ ទីនេះគឺជាឧទាហរណ៍ដែលសរសេរតំលៃ 0 ឆ្លងកាត់ 9 ទៅ console រយះពេលប្រើសំរាប់ statement:

int i = 0;

for (; i != 10; )

{

Console.WriteLine(i);

i++;

}

ស្វែងយល់ពី Statement Scope

អ្នកនឹងធ្វើការកំណត់ចំណាំថាអ្នកអាច declare អថេរមួយនៅក្នុងផ្នែក initialization នៃ statement ។ ដែលអថេរត្រូវបាន scope ទៅក្នុង body នៃ statement រួចមិនបង្ហាញកាលណា statement បញ្ចប់ ។ តួនាទីនេះមានសារ:

សំខាន់ពីរយ៉ាង។ ទីមួយអ្នកមិនអាចប្រើអថេរបន្ទាប់ពីstatement ត្រូវបាន

បញ្ចប់វាមិនមាន scope វែង ។ ឧទាហរណ៍:

for (int i = 0; i != 10; i++)

{

}

Console.WriteLine(i); //compile time error

ទីពីរ អ្នកសរសេរពីរឬច្រើន statements បន្ទាប់មកទៅផ្សេងទៀតដែល ប្រើឈ្មោះអថេរដូចគ្នា ។ ពីព្រោះអថេរគឺនៅក្នុង scope ខុសគ្នា ។ ឧទាហរណ៍:

for (int i = 0; i != 10; i++)

{

}

for (int i = 0; i != 20; i += 2) // okay

{

}

4. សរសេរ do Statement

ទាំងពីរ while statement និង for statement សំរាប់ត្រួតពិនិត្យ កន្សោម logic Boolean នៅខាងលើនៃ loop ។ នេះវាមានន័យថា if សំដែង

ចេញគឺជា false នៅលើការត្រួតពិនិត្យដំបូងនោះ body នៃ loop នឹងមានរត់ ដំណើរការមិនមានហេតុការណ៍ម្តងទៀត ។ ជួនពេលខ្លះអ្នកនឹងចង់បានសរសេរ statement មួយកន្លែងដែលអ្នកដឹងថា body នៃ loop មួយមានរត់យ៉ាងហោច ណាស់ ។ ក្នុងស្ថានភាពនេះ អ្វីដែលអ្នកត្រូវការគឺជា statement មួយនៅកន្លែង បង្ហាញត្រូវបានវាយតំលៃនៅខាងក្រោមនៃ loop បន្ទាប់មក body នៃ loop រត់ដំណើរការ ។

do

statement

while (booleanExpression);

ប្រសិនបើអ្នកចង់បាន loop do ដើម្បីផ្ទុកពីរឬច្រើន statements អ្នកត្រូវតែមាន group statements នៅក្នុង block ។  ឧទាហរណ៍ សរសេរ តំលៃ 0 ឆ្លងកាត់ 9 ទៅក្នុង console ដែលប្រើក្នុងពេលនេះ do statement:

int i = 0;

do

{

Console.WriteLine(i);

i++;

}

while (i != 10);

ជំហានឆ្លងកាត់ធ្វើ do statement

  1. ក្នុង Code និងសន្លឹក Text Editor រកមើល showSteps_Click method
  2. ធ្វើចលនាលើ cursor ទៅ statement ទីមួយនៃ showSteps_Click method
  3. statement ទីមួយបង្ហាញដូចខាងក្រោមនេះ:

 int amount = System.Int32.Parse(number.Text);

  1. ចុចស្តាំលើ Right-click statement ទីមួយរួចហើយចុច Run ទៅ   Cursor
  2. កាលណាបង្ហាញ form វាយសរសេរ 2693 លើប្រអប់ text box រួចចុចលើ Step
  3. បង្ហាញ Debug toolbar មិនមែនជា visible (លើ View menu, ទៅ Toolbars រួចហើយជ្រើសរើស Debug)

a

  1. សន្លឹក Local window ដែលបង្ហាញឈ្មោះ name, value និង type នៃអថេរតំបន់ local នៃ method ដែលកំពុងប្រើaDisplay មើល statement សារឡើងវិញ1. ចាប់ផ្តើម Start Microsoft Visual Studio .NET ។2. នៅលើ File menu -> ចូលក្នុង Open រួចចុចលើ Project ។ បើក ប្រអប់ Open Project dialog box ។3. បើកក្នុង Iteration project ដែលមានទីតាំងក្នុង \Microsoft Press\Visual C# Step by Step\Chapter5\Iteration folder នៅក្នុង My Documents folder ។

    4. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ Visual Studio .NET សង់បង្កើតឡើងនិងរត់ដំណើការកម្មវិធីប្រើប្រាស់មានប្រអប់ពីរនិង group នៃបួន Keyword option។

a5. ក្រោមក្រុម Keywords ជ្រើសរើស While option ។  while statement ខាងក្រោមនេះបង្ហាញក្នុងប្រអប់ Code text box ។ ក្នុង

Statement​ នេះគឺជា while statement ដែលអ្នកបានឃើញដែល

សរសេរតំលៃ 0 ឆ្លងកាត់ 9 console ។ ក្នុង text ដែល code នេះ សរសេរដើម្បីទៅក្នុងត្រូវបានមើលឃើញក្នុងប្រអប់ Outcome text

int i = 0;

while (true)

{

Console.WriteLine(“continue ” + i);

i++;

if (i != 10)

continue;

else

break;

}

6. ជ្រើសរើស For option ។ នៅខាងក្រោមនេះ for statement បង្ហាញក្នុងប្រអប់ Code box ។ text ដែលមានសរសេរ code នេះ ដើម្បីទៅក្នុង console ត្រូវបានមើលឃើញក្នុងប្រអប់ Outcome box

for(int i = 0; i != 10; i++)

{

Console.WriteLine(“for” + i);

}

7. ជ្រើសរើស Do option ។ ប្រអប់ Code box មើលឃើញក្នុង do statement ដែលអនុវត្តជា loop ដើម្បីសរសេរតំលៃ 0 ឆ្លងកាត់ 9 ទៅ console ។

8. ជ្រើសរើស Continue/Break option ។ ក្នុងប្រអប់ Code box ដែលមើលឃើញ while loop ដែលប្រើ break និងបន្ត statement ដើម្បីសរសេរតំលៃ 0 ឆ្លងកាត់ 9 ទៅ console ។

9. ចុចលើ Quit អ្នកត្រឡប់ទៅកម្មវិធី the Visual Studio .NET ។

break និងបន្ត Statements ក្នុងជំពូកទី 4 អ្នកបានឃើញ break statement ចាប់ផ្តើមប្រើរំលង switch statement ។ អ្នកអាចប្រើ break statement បានផងដែរដើម្បីរំលង body នៃ statement សារឡើងវិញ កាល ណាអ្នកបំបែកចេញពី loop គឺមិនមាន delay ក្នុងពេលភ្លាមៗនោះ ។

int i = 0;

while (true)

{

Console.WriteLine(i);

i++;

if (i != 10)

continue;

else

break;

}

ក្នុង code នេះគឺជាតំលៃដាច់ខាត់មិនចេះប្រែប្រួល ។ មានការណែនាំ កម្មវិធីជាច្រើន programming ដែលប្រើដោយប្រយ័ត្នប្រយែងឬមិនមានបញ្ហាទាំងអស់ពីព្រោះវាតែងតែបានប្រមូលផ្តុំជាមួយការស្វែងយល់ពី code ដ៏សំបាក ឧទាហរណ៍ ប្រសិនបើអ្នករត់បន្ត statement ពីខាងក្នុង statement ផ្នែក update នឹងរត់តំណើរការ ។ ក្នុងលំហាត់បន្ទាប់អ្នកនឹងសរសេរ while statement ដើម្បីអានមាតិកានៃប្រភពដើម source file បន្ទាត់មួយក្នុងរយ: ពេលណាមួយនិងសរសេរក្នុង line នីមួយៗទៅក្នុងប្រអប់ text box ក្នុង កម្មវិធីប្រើប្រាស់ Microsoft Windows ។ សរសេរ while statement

1. នៅលើ File menu ចូលក្នុង Open រួចចូលក្នុង click Project ។ បើកប្រអប់ Open Project dialog box ។

2. បើក Open whileStatement project ដែលមានទីតាំងក្នុង \Microsoft Press\Visual C# Step byStep\Chapter 5\whileStatement folder នៅក្នុង My Documents folder។

3. នៅលើ Debug menu ចុចលើ Start Without Debugging. Visual Studio .NET សង់បង្កើត រួចរត់ដំណើរការកម្មវិធីប្រើប្រាស់

Windows application ។

4. ចុចលើ Open File ។ បើកប្រអប់ Open dialog box ។

5. ក្នុង Directory \Microsoft Press\Visual C# Step by Step\Chapter 5\whileStatement folder ក្នុង My Documents folder របស់អ្នក ។

a6. ជ្រើសរើស Form1.cs file រួចហើយចុចលើ click Open ។ ឈ្មោះ នៃ source file, Form1.cs បង្ហាញក្នុងប្រអប់តូច text box ប៉ុន្តែ មាតិកានៃ Form1.cs មិនបង្ហាញក្នុងប្រអប់ text box ធំ ។

7. ចុចលើ Close អ្នកត្រឡប់ចូលទៅក្នុងកម្មវិធី Visual Studio .NET

8. ក្នុង Code pane ទីតាំង openFileDialog_FileOk method (ប្រសិនបើ code គឺមិនត្រូវបានមើលឃើញក្នុង Code pane ចុចលើ right-click Form1.cs នៅក្នុង Solution Explorer រួចចុចលើ View Code) ។ body នៃ method គឺជាកំពុងតែអនុវត្តដូចខាងក្រោម:

string fullPathname = openFileDialog.FileName;

FileInfo src = new FileInfo(fullPathname);

filename.Text = src.Name;

/* add while loop here */

Statement ទីមួយបាន declares អថេរ string ដែលហៅថា fullPathname និង initializes វាទៅក្នុង FileName នៃ openFileDialog field ។ ក្នុង statement initializes fullPathname នេះមានឈ្មោះពេញ

(ដែលរួមមាន folder) នៃប្រភព source file ដែលបានជ្រើសរើសក្នុងប្រអប់ Open dialog box ។

9. ប្តូរ /* add while loop ទីនេះគឺ */ ជាមួយ statements ដូចជា:

source.Text = “”;

TextReader reader = src.OpenText();

string line;

while ((line = reader.ReadLine()) != null)

{

source.Text += line + “\n”;

}

reader.Close();

The first statement is:

source.Text = “”;

ក្នុង statement ទីមួយ បង្កើតឡើងវិញក្នុងប្រអប់នៃ source text box ។ ហើយ statement គឺ:

TextReader reader = src.OpenText();

ក្នុង statement នេះ declares  អថេរ TextReader មួយដែហៅ reader ។ (TextReader គឺជាថ្នាក់ផ្សេងទៀតដែលបានផ្គត់ផ្គង់ដោយ.NET Framework ដែលអ្នកអាចប្រើសំរាប់អានចរន្តនៃ characters ពីប្រភព sources ដូចជា files) វាបាន initializes ទៅក្នុង TextReader រួចត្រឡប់ពី src.OpenText method ។

​          ក្នុង statement ទីបីគឺ is:

string line;

statement នេះ declares string មួយដែលហៅថា line ។ អថេរនេះ នឹងដាក់លើ line នីមួយៗនៃ text ដូចជា readerreads វាពី file ។

statement ទីបួនគឺជា while loop

while((line=reader.ReadLine())!=null)

{

}

ប្រសិនបើ string មួយទទួលបានជ័យជំនេះអានពី file នោះ line នឹង មិនជា null កន្សោម Boolean គឺជា true ហើយ body នៃ while statement នឹងដំណើរការ ។ ផ្ទុក statement ទោល:

source.Text += line + “\n”;

10. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ Visual Studio .NET សង់បង្កើតនិងរត់ដំណើរការកម្មវិធីប្រើប្រាស់។

11. ចុចបើកលើ Open File ។ បើកប្រអប់ Open dialog box ។

12. ជ្រើសរើស Form1.cs file រួចបើក Open ។ ពេលនេះមាតិកានៃ file ដែលបានជ្រើសរើសបានមើលឃើញក្នុងប្រអប់ text box ។

a13. ក្នុងប្រអប់ text box ទីតាំង openFileDialog_FileOk method។ method នេះផ្ទុក while statement ដែលអ្នកទើបបន្ថែម។

14. ចុចលើ Close អ្នកត្រឡប់ទៅកម្មវិធី Visual Studio .NET

សរសេរ do statement

  1. បើកលើ File menu ចូលក្នុង Open រួចហើយចុចលើ Project. The បើកប្រអប់ Open Project dialog box ។

2. បើក Open the doStatement project ដែលមានទីតាំងក្នុង \Microsoft Press\Visual C# Step by Step\Chapter

5\doStatement folder ក្នុង My Documents folder របស់អ្នក ។ បើក doStatement project ។

3. លើ Debug menu ចុចលើ Start Without Debugging ។ Visual Studio .NET សង់បង្កើតនឹងរត់ដំណើរការកម្មវិធីប្រើប្រាស់ Windows application ។

3. កម្មវិធីប្រើប្រាស់មានពីរប្រអប់ text boxes រួចបង្ហាក្នុងប៊ូតុងShow Steps ។ អ្នកបញ្ចូលចំនួនវិជ្ជមាននៅប្រអប់ខាងលើ text box កាលណាអ្នកចុចលើប៊ូតុង Show Steps នៅប្រអប់ខាងក្រោម text box បង្ហាញជំហានដែលប្រើដើម្បីបង្កើត string មួយបង្ហាញចំនួននេះ

4. បញ្ចូល 2693 ក្នុងប្រអប់ខាងលើប្រអប់ text box។

5. ចុចលើ Show Steps ។ ប្រអប់ខាងក្រោម text box មើលឃើញ ជំហានដែប្រើដើម្បីបង្កើត string មួយនៃការបង្ហាញនៃ 2693:

6. ចុចលើសន្លឹក window ដើម្បីត្រឡប់ទៅក្នុងកម្មវិធី Visual Studio .NET programming ។

7. ក្នុង Code pane ទីតាំង showSteps_Click method (ប្រសិនបើ code គឺត្រូវបានបង្ហាញក្នុង Code pane ចុចលើ right-click Form1.cs ក្នុង Solution Explorer រួចចុចលើ View Code) ។ method នេះផ្ទុក statements ខាងក្រោមនេះ:

int amount =System.Int32.Parse(number.Text);

steps.Text = “”;

string current = “”;

do

{

int digitCode = ‘0’ + amount % 10;

char digit = Convert.ToChar(digitCode);

current = digit + current;

steps.Text += current + “\r\n”;

amount /= 10;

}

while (amount !=? 0);

statement ទីមួយនៃ method នេះគឺ:

int amount = System.Int32.Parse(number.Text);

statement នេះប្តូរ string ដែលបញ្ចូលទៅក្នុង Text នៃចំនួន text box ទៅក្នុង int ដែលប្រើ Parse method នៃ System.Int32 ។ statement ទីពីរនៃ method គឺជា: steps.Text=””; statement នេះបង្កើត

ឡើងវិញ Text នៃប្រអប់ steps text box ។ statement ទីបីនៃ method គឺ:

string current = “”; statement នេះ declares អថេរ string មួយដែលហៅថាចរន្ត initializes វាទៅ string ទទេ ។ statement ទីបួន method គឺការធ្វើ do statement:

do

{

}

while(amount!=? 0);

statement នេះនឹងធ្វើឡើងវិញរត់ដំណើការ body នៃ do statement កាលណាបន្តលក្ខណ: (amount != 0) ដែលនៅសេសសល់ true ។ ចាំថា body ត្រូវរត់ដំណើរការយ៉ាងហោចណាស់ម្តង ។ statement ទីមួយនៅក្នុង do loop គឺ:

int digitCode =’0’+ amount%10;

statement នេះ declares ក្នុងអថេរ int ដែលហៅថា digitCode និហ initializes វាទទួលលទ្ធផលបង្ហាញដូចខាងក្រោមនេះ:

‘0’ + amount % 10

ក្នុងកន្សោមនេះទាមទារការពន្យលបន្ថែមតំលៃគឺ character zero ។ ក្នុង character បង្កើតដោយប្រើដោយ character សមភាពទៅចំនួនគត់ 48 (character នីមួយៗមានកម្មសិទ្ធ character code ដែលមានតំលៃមួយគឺជា ចំនួនគត់) ។ តំលៃ % 10 គឺជាសំណល់អ្នកទទួលបានកាលណាអ្នកបែងចែក ចន្លោះ 10 ។ ឧទាហរណ៍ ចន្លោះស្មើ 2693 កាលណា 2693 % 10 គឺជា 3 (2693 ផ្តល់ដោយ 10 គឺជា 269 សំណល់ 3) ។

ជំហាននៃ do statement

1. ក្នុង Code pane រកមើល showSteps_Click method ។

2. ចលនា cursor ទៅទីតាំង statement ទីមួយនៃ showSteps_Click method ។  statement ទីមួយក្នុង showSteps_Click method គឺមានដូចខាងក្រោមនេះ:

Int amount =System.Int32.Parse(number.Text);

3. ចុចលើ Right-click លើកន្ថែងណាមួយក្នុង statement ទីមួយ រួចចុចលើ Run ទៅលើ Cursor ។ Visual Studio .NET សង់បង្កើត

រួចចុចលើកម្មវិធីប្រើប្រាស់ ។

4. បញ្ចូល 2693 ក្នុងប្រអប់ text box ខាងលើ ។

5. ចុចលើ Show Steps អ្នកត្រឡប់ចូលក្នុងកម្មវិធី Visual Studio .NET ។

6. លើ View menu ចូលក្នុង Toolbars រួចចុចលើ Debug (ប្រសិន បើវាមិនមាន) ។ ពេលនោះ Debug toolbar បានបើក ។

7. នៅលើ Debug toolbar ចុចលើ Breakpoints drop-down arrow ខាងក្រោមនេះជា menu បង្ហាញ:

ITCAMBO_New

មជ្ឈមណ្ឌល អាយធី ខេប៊ូ

មានទទួលរចនាវ៉ិបសាយ កម្មវិធីគ្រប់គ្រងក្រុមហ៊ុន…
មានបើកវគ្គខ្លី:
–  វគ្គរចនាវ៉ិបសាយ HTML,CSS, Javascript, PHP, ASP.NET
–  វគ្គដំឡើងកុំព្យូទ័រណែតវឺក Networking
–   វគ្គជួសជុលកុំព្យូទ័រ Computer Repairing
–   វគ្គសរសេរកម្មវិធីលើ iOS (កម្មវិធី iPhone, iPAD)
ទំនាក់ទំ​នង 0977778647-077778647-070778647
Email: chhunnan@gmail.com
Chat: yahoo, skype: chhunnan
www.itcambo.com

មេរៀនទី៦: Error និង Exception

ក្នុងជំពូកនេះរៀនពីរបៀប  :

-ប្រើបណ្តាកន្សោម try, catch និង finally ដើម្បីគ្រប់គ្រង exceptions

-ប្រើពាក្យ Control checked និង unchecked keywords ។

– បញ្ចូល exceptions ពីក្នុងកម្មសិទ្ធិ methods ដែលប្រើ keyword.

-exceptions ក្នុង Microsoft Visual Studio .NET debugger។

1. Coping ជាមួយ Error

នៅពេលហៅ method មួយអ្នកឆែកមើលអថេរទាំងអស់ ដើម្បីមើលថា តើ method failed ឬយ៉ាងណា? ដំណោះស្រាយគឺមានការលំបាកព្រោះមាន ហេតុផលដូចខាងក្រោមនេះ:

· កម្មវិធី logic ចម្បងដែលប្រទាក់គ្នាជាមួយឆ្លាស់ code គ្នាដើម្បីឆែក errors ។ កម្មវិធីមានការលំបាកយល់ ។

· ត្រួតពិនិត្យ error ការប្រើ code គឺជាប្រភេទដដែលៗនិងអាចមាន ភាពងាយស្រួលបង្កើតទំហំ size នៃកម្មវិធីកម្មវិធីធំមានការលំបាកខ្លាំង harder ក្នុងការស្វែងយល់ពីកម្មវិធីតូចៗ ។

· គ្រប់ methods ទាំងអស់មានការយល់ព្រមលើបង្កើតអថេរទាំងអស់ ទៅតំលៃដែលមិនប្រើក្នុង method ផ្សេងទៀត ។

2. អនុវត្ត Code និងការចាប់ Exception

គំនិតក្នុងការដំណើរការនៅក្នុង exception គឺជា code ដែលអនុវត្តជាចម្បងនៃកម្មវិធីពីក្នុង error code ។ កាលណាពីផ្នែកត្រូវបាន

បែងចែក ។ ដើម្បីសរសេរកម្មវិធី exception-aware អ្នកត្រូវការពីរបញ្ហាទីមួយ

សរសេរ code នៅក្នុង try block (try គឺជា keyword) ។

ទីពីរអ្នកសរសេរ catch មួយឬច្រើន (catch គឺជា keyword) ។ ប្រសិនបើមួយនៃ statements នៅក្នុង try block ដែលបង្កើតនៅក្នុង exception តាមធម្មតា left-to-right, top-to-bottom នៃកម្មវិធីគែ halts, និងការត្រួតពិនិត្យការបញ្ជួនដោយផ្ទាល់ catch ។

try

{

int leftHandSide = Int32.Parse(leftHandSideOperand.Text);

int rightHandSide = Int32.Parse(rightHandSideOperand.Text);

int answer = doCalculation(leftHandSide, rightHandSide);

result.Text = answer.ToString();

}

catch (FormatException fEx)

{

// Handle the exception

}

វិធី System.Int32.Parse method ព្យាយាមដើម្បីប្តូរវាក្នុង string argument ទៅក្នុងចំនួនគត់ integer ។ ឧទាហរណ៍ “99” គឺត្រូវបានប្តូរ ទៅក្នុង 99 ។ អ្វីដែលអ្នកនឹងមាន System.Int32.Parse ត្រឡប់មកវិញកាលណាផ្ញើ string ក្នុង format ដែលខុសដូចជា “Tommy Trewblew” ចំលើយគឺមិន ត្រឹមត្រូវ ។ អ្វីក៏ដោយតំលៃវាត្រឡប់ (-1 ជាឧទាហរណ៍) ។
a3. ប្រើប្រាស់ Multiple catch

តាមពិតភាពខុសគ្នា errors បោះចោលពីភាពខុសគ្នាប្រភេទនៃ exceptions ដើម្បីបង្ហាញពីប្រភេទខុសគ្នាការបរាជ័យ failure ។ ឧទាហរណ៍ សន្មតថាប្រើ  method ដែលហៅថាការគណនាដែលអាចបោះចោល

DivideByZeroException ។ ដើម្បី demo បញ្ហានេះអ្នកអាចសរសេរ catch handler ជាប់គ្នាដូចខាងក្រោមនេះ:

try

{

int leftHandSide = Int32.Parse(leftHandSideOperand.Text);

int rightHandSide = Int32.Parse(rightHandSideOperand.Text);

int answer = doCalculation(leftHandSide, rightHandSide);

result.Text = answer.ToString();

}

catch (FormatException fEx)

{

//…

}

catch (OverflowException oEx)

{

//…

}

4. សរសេរ catch Handler ជាទូទៅ

ជាទូទៅ catch Handler វាទទួលដំណើរការបានល្អប្រសើរ ។ ប្រសិន

បើអ្នកមិនចង់សរសេរ catch handler ដែលមានលក្ខណ:ពិសេសដោយឡែក

ខុសគ្នាពីប្រភេទនៃ​ exception (ប៉ុន្តែមិនមានការធុញទ្រាន់ពីព្រោះវាមាន

ប្រភេទខុសគ្នានៃ exceptions) អ្នកអាចសរសេរ catch handler មួយដែល នឹង catch exception ។

try

{

int leftHandSide = Int32.Parse(leftHandSideOperand.Text);

int rightHandSide = Int32.Parse(rightHandSideOperand.Text);

int answer = doCalculation(leftHandSide, rightHandSide);

result.Text = answer.ToString();

}

catch (Exception ex) // this is a general catch handler

{

//…

}

មាន syntax មួយផ្លាស់ប្តូរ catch handler ជាទូទៅគឺ catch { … } ក្នុងករណីនេះអ្នកមិនត្រូវការប្រភេទ exception ។

ប្រសិនបើលោកអ្នករត់ដំណើរការក្នុង Debug ពេលនោះបានជួបបញ្ហា occur លោកអ្នកចាប់ផ្តើមជាមួយ Start Without Debugging។
aចុចលើពិស្តារ Details ក្នុងប្រអប់ Exception dialog ដើម្បីបង្ហាញព័ត៌មាន
aជោគជ័យក្នុងដំណើរការ FormatException

សរសេរ try/catch statement

1. ចាប់ផ្តើម Start Visual Studio .NET ។

2. បើក MathsOperators project ដែលមានទីតាំងក្នុង \Microsoft Press\Visual C# Step By Step\Chapter 6\MathsOperators folder នៅក្នុង My Documents folder របស់អ្នក ។

2. បើក MathsOperators project ។ មុនពេលរត់កម្មវិធីប្រើប្រាស់ ដំបូងអ្នកនឹងបង្កើត Exception settings ឡើងវិញនៃ Visual Studio ដូច្នេះ debugger មិនធ្វើ automatically ចាប់ផ្តើមកាលណា exception ត្រូវបានបោះចោល ។

3. នៅលើ Debug menu ចុចលើ Exceptions ។ បើកប្រអប់ Exceptions dialog box ។
a4. ក្នុង  Exception list ជ្រើសរើស Common Language Runtime Exceptions category ។

5. កាលណា Exception ត្រូវបានបោះចោល ជ្រើសរើស Continue ។

6. ក្រោម If The Exception Is Not Handled ជ្រើសរើស Continue.

7. ចុចលើ OK ។ ប្រអប់ Exceptions dialog box បានបិទ ។

8. លើ Debug menu ចុច Star ។ ឬប្រើ shortcut key សំរាប់ចាប់ ផ្តើម Start គឺចុចលើ F5 ។ កម្មវិធី Visual Studio .NET សង់បង្កើត

ឡើងនិងរត់ដំណើរការ Windows application ។ Exceptions Form បង្ហាញឡើង ។
a9. បញ្ចូលឈ្មោះ Enter John ក្នុងប្រអប់ខាងឆ្វេងដៃ Left Operand text box រួចហើយចុចលើ Calculate ។ កម្មវិធីប្រើប្រាស់ shuts down រួចហើយអ្នកត្រឡប់ទៅកម្មវិធី Visual Studio .NET programming ។ ពេល error ក្នុង text ដែលអ្នកបញ្ចូលក្នុងប្រអប់ ខាងឆ្វេងដៃ Operand text box បណ្តាលអោយមានមូលហេតុជាមួយ

កម្មវិធីប្រើប្រាស់បរាជ័យ fail ។ អាច message វិនិច្ឆ័យក្នុង Output window ។ អ្នកនឹងឃើញចំនួននៃ messages អំពី DLLs ចាប់ផ្តើម បញ្ចូលដោយ runtime ។ ខាងក្រោមនេះអ្នកនឹងឃើញ messages:

An unhandled exception of type ‘System.FormatException’

occurred in mscorlib.dll

Additional information: Input string was not in a correct format.

Unhandled Exception: System.FormatException:Input string was

not in a correct format.

at System.Number.ParseInt32(String s, NumberStyles style,

NumberFormatInfo info)

at Methods.Form1.calculate_Click(Object C:\Visual C# Step By Step\Chapter 6\MathsOperators\Form1.cs:line 257

ពីក្នុង text នេះអ្នកអាចស្រាវជ្រាវ exception ត្រូវបានបោះចោលដែល  ហៅទៅ System.Int32.Parse ក្នុង calculate_Click method ។

10. បន្ថែម try block ដែលរួមមាន 4 statements ក្នុង calculate_Click method ជាក់ស្តែងដូចខាងក្រោមនេះ:

try

{

int lhs = System.Int32.Parse(lhsOperand.Text);

int rhs = System.Int32.Parse(rhsOperand.Text);

int answer = doCalculation(lhs,? rhs);

result.Text = answer.ToString();

}

Add a catch block after this new try block, exactly as? follows:

catch (System.FormatException? caught)

{

result.Text = caught.Message;

}

10. catch handler នេះចាប់យក FormatException thrown ដោយ System.Int32.Parse រួចហើយសរសេរ Message property របស់វាទៅក្នុង Text property នៃប្រអប់លទ្ធផល text box នៅខាង ក្រោមនៃ form ។

11. នៅលើ Debug menu ចុចលើ Start ចូល Visual Studio .NET សង់បង្កើតឡើងវិញរួចរត់ដំណើរការកម្មវិធីប្រើប្រាស់ ។ អ្នកនឹងបញ្ចូល វាឥឡូវនេះដែលមានតំលៃដូចគ្នាដែលបណ្តាលកម្មវិធីប្រើប្រាស់ fail ។ 12. វាយសរសេរ John ក្នុងប្រអប់ខាងឆ្វេងដៃ Operand text box រួច ចុចលើ Calculate ។  ពេលនោះ catch handler ជោគជ័យ

បានចាប់យក FormatException និងផ្ញើ message “Input string was not in a correct format.” ត្រូវបានសរសេរទៅក្នុងប្រអប់ Result text box ។
a

13. ចុចលើ Quit ។ អ្នកត្រឡប់ទៅក្នុងកម្មវិធី Visual Studio .NET ។

5. ប្រើប្រាស់ Checked និង Unchecked

ក្នុងជំពូកទី2ខាងលើអ្នកបានរៀនពីរបៀបប្រើប្រមាណវិធី binary arithmetic ដូចជា + និង * លើប្រភេទ data types ដូចជា int និង double ។

អ្នកបានឃើញប្រភេទ data ដើមកំណើតដែលមានទំហំមិនប្រែប្រួល ។ ឧទាហរណ៍  C# int គឺជាចំនួនពិត 32 bits ។ ព្រោះ int មានទំហំមិនប្រែប្រួល

អ្នកដឹងច្បាស់ពីចំនួនគត់ integer គឺ-232 ទៅ 232-1 ។ ប្រសិនបើអ្នកសំរេច បង្កើតតំលៃ minimum ឬ maximum value នៃ int ក្នុង code អ្នកអាចប្រើ System.Int32.MinValue ឬ System.Int32.MaxValue fields ។

សរសេរ checked Statement

checked statement គឺជាបណ្តុំនៅខាងមុខជាមួយ checked keyword ។ ទាំងអស់គឺជាចំនួនគត់ integer arithmetic ក្នុង checked

statement បោះចោល OverflowException ដែលបង្ហាញដូចក្នុងឧទាហរណ៍

ខាងក្រោមនេះ:

int number = System.Int32.MaxValue;

checked

{

int willThrow = number++;

Console.WriteLine(“this won’t be reached”);

}

ចំនួនគត់ integer arithmetic មានក្នុងបណ្តុំ checked blockគឺជា checked ។ ឧទាហរណ៍ ប្រសិនបើមួយនៃ checked statements គឺហៅ method ។

អ្នកអាចប្រើ unchecked keyword បានផងដែរដើម្បីបង្កើតបណ្តុំ unchecked block statement. ចំនួនគត់ទាំងអស់នៅក្នុងបណ្តុំ unchecked គឺមិនមែនជា checked ឧទាហរណ៍:

int number = System.Int32.MaxValue;

unchecked

{

int wontThrow = number++;

Console.WriteLine(“this will be reached”);

}

សរសេរកន្សោម Checked Expression

អ្នកអាចប្រើ checked និង unchecked keywords បានផងដែរ ដើម្បីត្រួតពិនិត្យលើកន្សោម integer expressions ដែលនៅពីមុខកន្សោម សញ្ញាវង់ក្រចកជាមួយ checked ឬ unchecked keyword​ ដូចដែលបង្ហាញ ក្នុងឧទាហរណ៍នេះ:

int wontThrow = unchecked(System.Int32.MaxValue+1);

int willThrow = checked(System.Int32.MaxValue+1);

ប្រមាណវិធី compound ដូចជា += និង -= និងប្រមាណវិធីបង្កើន  (++) និងបញ្ចុះ (–) គឺជាប្រមាណវិធីអាចត្រួតពិនិត្យដែលប្រើ checked និង unchecked keywords ។ ចាំថា x += y; គឺដូចជា x = x + y; ។

ប្រើកន្សោម checked expression

1. នៅលើ Debug menu ចុចលើ Exceptions ។ ប្រអប់ Exceptions dialog box បើកចេញ ។

2. ជ្រើសរើស Common Language Runtime Exceptions ។

3. កាលណា Exception ត្រូវបានបោះចោល ជ្រើសរើស Continue ។

4. ក្រោម If The Exception Is Not Handled ជ្រើសរើស Break Into The Debugger រួចចុលើ click OK ។

5. លើ Debug menu ចុចលើ Start. Visual Studio .NET សង់បង្កើត រួតរត់ដំណើរការ Windows application ។

6. វាយសរសេរ 9876543 ក្នុងប្រអប់ខាងឆ្វេងដៃ Operand text box, វាយសរសេរ 9876543 ក្នុងប្រអប់ខាងស្តាំដៃ Right Operand text box ។ ជ្រើសរើស Multiplication option ក្រោមប្រមាណវិធី រួចចុច

លើ Calculate ។  តំលៃ -1195595903 បង្ហាញក្នុងប្រអប់ Result text box លើ form ។

7. ក្នុង Quit អ្នកត្រឡប់ទៅក្នុងកម្មវីធី Visual Studio .NET ។

8. ក្នុងសន្លឹក Code ទីតាំងតំលៃជាច្រើន method:

private int multiplyValues(int lhs, int rhs)

{

expression.Text = lhs.ToString() + ” * ” + rhs.ToString();

return? lhs * rhs;

}

9. Edit ត្រឡប់ statement ដែលត្រឡប់ទៅតំលៃគឺ checked ។ តំលៃច្រើន multiplyValues method និងមើលឃើញដូចខាងក្រោម:

private int multiplyValues(int lhs, int rhs)

{

expression.Text = lhs.ToString() + ” * ” + rhs.ToString();

return checked(lhs * rhs);

}

9. ឥឡូវនេះជ្រើសរើស checked រួចបោះចោលOverflowException

10. នៅលើ Debug menu ចុចលើ Start ចូលក្នុង Visual Studio .NET​ សង់បង្កើតរួចរត់ដំណើរការ Windows application ។

11. វាយសរសេរ 9876543 ក្នុងប្រអប់ខាងឆ្េវង Left Operand text box វាយសរសេរ 9876543 ក្នុងប្រអប់ខាងស្តាំដៃ Right Operand text box ជ្រើសរើស Multiplication option ក្រោមប្រមាណវិធីរួចចុច

លើ Calculate ។ អ្នកត្រឡប់ចូលទៅកម្មវិធី Visual Studio .NET និង ឃើញ message box បង្ហាញ ។ ក្នុង message ប្រាប់អោយអ្នកដឹង statement ក្នុង code ត្រូវបានបោះចោល OverflowException ។
a12. ចុចលើ Break ។ ប្រអប់ message box បានបិទ អ្នកឥឡូវមើល code Code ក្នុង debug mode ។

debug line គឺទៅខាងឆ្វេងដៃនៃ return statement ក្នុងតំលៃ

multiplyValues method:

return checked(lhs * rhs);

ធ្វើចលនាក្នុង cursor លើអថេរ rhs ក្នុង statement ។ បង្ហាញប្រាប់ តំលៃនៃ rhs គឺជា 9876543 ។

13. នៅលើ Debug menu ចុចលើ Stop Debugging ។ ប្រសិនបើ

សន្លឹក Debug window ត្រូវបានបើក អ្នកអាចចុចលើប៊ូតុង

Stop Debugging ។

14. ក្នុងសន្លឹក Code window ទីតាំង calculate_Click method។

15. បន្ថែម catch handler ភ្លាមៗនោះបន្ទាប់ពីមានរួចស្រេច catch handler ក្នុង calculate_Click method:

catch(System.OverflowException caught)

{

result.Text = caught.Message;

}

16. នៅលើ Debug menu ចុចលើ Start ចាប់ផ្តើម Visual Studio .NET សង់បង្កើតឡើងវិញរួចរត់សន្លឹក Windows application ។

17. វាយសរសេរ 9876543 ក្នុងប្រអប់ Left Operand text box វាយសរសេរ 9876543 ក្នុងប្រអប់ Right Operand text box

ជ្រើសរើស Multiplication option ក្រោមប្រមាណវិធីរួចុចលើ Calculate ។ ទីពីរ catch handler ជោគជ័យចាប់លើ OverflowException និង debugger មិនចាប់ផ្តើម ។ ពេលនោះ message ត្រូវបានសរសេរបង្ហាញក្នុងប្រអប់លទ្ធផល Result text box ។aa6. ​បន្ថែម Exception

សន្មតថាអ្នកកំពុងអនុវត្ត method ដែលហៅថា monthName ដែលព្រមទទួល int argument និងត្រឡប់ទៅឈ្មោះ name ត្រូវគ្នាទៅ month ។ ឧទាហរណ៍ monthName(1) នឹងត្រឡប់ “January”: អ្វីជា method return កាលណាចំនួន integer argument តូចជា 1 ឬធំជាង12 ។ ឈ្មោះ name នៃ ខែ month -16 ឬ month 1356 ។ ក្នុងរយះពេលជាយូរអ្នកនឹងរកមើលថ្នាក់នឹង

ពិណ៌នាពីលក្ខណ:ហើយអ្នកអាចប្រើវា (ប្រសិនបើមិនមាន អ្នកអាចបង្កើតវា ដោយងាយជាកម្មសិទ្ធិ exception class ប៉ុន្តែអ្នកត្រូវការស្គាល់ពីអ្វីដែលអាចធ្វើបាន ។ ក្នុងករណីនេះ .NET Framework System.Argumentout of

RangeException class គឺត្រឹមត្រូវ:

public static string monthName(int month)

{

switch (month)

{

case 1 :

return “January”;

case? 2 :

return “February”;

case 12 :

return “December”;

default :

throw new System.ArgumentOutOfRange

Exception(“Bad month”);

}

បន្ទាប់មក statement គឺជាឧទាហរណ៍នៃ throw statement:

throw new System.ArgumentOutOfRange

Exception(“Bad month”);

throw statement មានពីរផ្នែក ។ ទីមួយផ្នែកក្នុង throw keyword ។  អ្នកប្រើ throw keyword ដើម្បីលុបចោល exception object ។ throw keyword គឺជាឈ្មោះ well-named ។ ផ្នែកទីពីរគឺជាដែលអ្នកកំពុងលុប។ ក្នុង ឧទាហរណ៍នេះប្រើកន្សោមដែលបង្កើត object ថ្មី ។ កន្សោមបន្ទាប់គឺជាផ្នែក ដែលបង្កើត ArgumentOutOfRange (ដែលនៅក្នុង System namespace) មានផ្ទុក message “Bad month”:

new System.ArgumentOutOfRangeException

(“Bad month”)

ឧទាហរណ៍នេះគឺជា method ដែលមាននិយាយច្បាស់លាស់ក្នុង ជំពូកទី 7 ។ Throw ជាកម្មសិទ្ធ exception របស់អ្នក:

  1. នៅលើ Debug menu ចុចលើ Start ចូលក្នុង Visual Studio .NET រត់ដំណើរការកម្មវិធី Windows application ។

2. ចុចលើ Calculate មិនជ្រើសរើស option ប្រមាណវិធី

3. វាយសរសេរ 24 ក្នុងប្រអប់ឆ្វេងដៃ Operand text box សរសេរ 24 ក្នុង ប្រអប់ស្តាំដៃ Right Operand text រួចចុចលើ Calculate ។ វាយតំលៃ zero បង្ហាញក្នុងប្រអប់ Result text box ។
a

មេរៀនទី៧: បង្កើត Class និង Object

ក្នុងជំពូកនេះ អ្នកនឹងរៀនពីរបៀប:

-Group ដែលទាក់ទងនិង methods និងទិន្នន័យ data ក្នុង class។

-ត្រួតពិនិត្យលទ្ធភាពនៃសមាជិករបស់ class members ដោយប្រើ ពាក្សកន្លឹះ public និង private

– បង្កើត objects ដោយប្រើពាក្យគន្លឹះថ្មី keyword និងប្រើវិធី constructor ចាប់ផ្តើម ។

-សរសេរ និហហៅ constructors ដែលជាកម្មសិទ្ធិផ្ទាល់ខ្លួន ។

-ប្រើពាក្សគន្លឹះ static keyword ដើម្បីបង្កើត methods និង

ទិន្នន័យ data ដែលអាចចែកចាយដោយទាំងអស់ដែលលេចឡើង  instances នៃ class ដូចគ្នា ។

1.  អ្វីជា Classification?

ពាក្សឬសគល់នៃ classification គឺជា class ។ កាលណាអ្នកមាន form class មួយ អ្នកអាចរៀបរៀងជាពត៌មានវិធីមួយមានប្រព័ន្ធទៅក្នុងអ្វីមួយ ហើយមានន័យ ។ នេះជាសកម្មភាពពិតនៃ classification ហើយអ្វីដែលគ្រប់ គ្នាតែងតែធ្វើឬមិនធ្វើបង្ហាញអ្នកបណ្តាអ្នកសរសេរកម្មវិធី programmers ។

2. អ្វីជា Encapsulation?

Encapsulation គឺជាបណ្តាពាក្សវែងផ្សេងដែលអ្នកអោយយោបល់ consultants សំរាប់ប្រើ ។ ឬសពាក្សគល់នៃ encapsulation គឺជាកញ្ចប់ capsule; ដែល encapsulation មានន័យដាក់អ្វីមួយទៅក្នុងកញ្ចប់ capsule។ មានពីរយ៉ាងមានសរ:សំខាន់របស់ encapsulation គឺ:

· ដើម្បីផ្គុំ method និងទិន្នន័យទៅក្នុង class; ឬម្យ៉ាងទៀតគឺ ផ្គត់ផ្គង់ classification។

· ដើម្បីត្រួតពិនិត្យមានលទ្ធភាពសំរាប់ method និងទិន្នន័យ data; ឬម្យ៉ាងទៀតដើម្បីត្រួតពិនិត្យប្រើជាមួយ class ។

Class គឺជាទំរង់នៃកម្មវិធី programming construct ដែលផ្តល់អោយ  syntax និង semantics សំរាប់ផ្គត់ផ្គង់ប្រើមូលដ្ឋានពីរ ។ ទីនេះ C# class ដែលហៅថា Circle  ផ្ទុកក្នុង method មួយ (ដើម្បីគណនាក្រឡាផ្ទៃរបស់ circle) និងគំរូទិន្នន័យ data (កាំរបស់ circle):

វិធីនៃការប្រើ Class

class Circle

{

double Area()

{

return 3.141592 * radius * radius;

}

double radius;

}

3. ត្រួតពិនិត្យមើល Accessibility

អ្នកអាចប្រើពាក្សគន្លឹះ public និង private ដើម្បីត្រួតពិនិត្យទោះបីជា method និង field គឺត្រូវបានអនុញ្ញាពីខាងក្រៅ:

· គឺជា method ឬ field ដែលហៅថា private ប្រសិនបើវាបង្ហាញ អនុញ្ញាតពីខាងក្រៅនៃ class ។ ដើម្បីប្រកាស declare ជាមួយ method ឬ field គឺជា private អ្នកសរសេរពាក្សគន្លឹះ private មុនពេលវាប្រកាស declaration ។

· method ឬ field ត្រូវបានហៅថា public ប្រសិនបើវាអនុញ្ញាតពី ខាងក្រៅនិងខាងក្នុង class ។ ដើម្បីប្រកាសដែលជា method ឬ field គឺជា public អ្នកសរសេរពាក្សគន្លឹះ public មុនពេលវាប្រកាស declaration ។

ខាងក្រោមនេះគឺ Circle class។ ពេលនេះក្រឡាផ្ទៃបានប្រកាស ដូច

ជា public method និងកាំត្រូវបានប្រកាសដូចជា private field:

Circle c;// Create a Circle variable

c = new Circle();// Initialize it

តម្លៃដែលផ្តល់អោយធម្មតា

int i;

i = 42;

4.  ធ្វើការជាមួយវិធី Constructor និង ពាក្សគន្លឹះ new

constructor គឺជា method នៃ class មួយដែលប្រើសំរាប់បង្កើត instance ថ្មីនៃ class ។ ដើម្បីមើលហេតុអ្វីបានជា constructor ត្រូវបាន

ទាមទារ អនុញ្ញាប្រៀបធៀបវិធីដែលមានក្នុងអថេរនៃប្រភេទ primitive type និងប្រភេទ class ត្រូវបានប្រកាស declared និង initialized ។ អ្នកអាចប្រើ ឈ្មោះនៃ class របស់អ្នកដើម្បីប្រកាស declare អថេរមួយ ។ syntax គឺជា ជាក់ច្បាស់ដូចគ្នាកាលណាអ្នក declare អថេរមួយនៃប្រភេទ primitive type (ដូចជា int); ឈ្មោះនៃប្រភេទនៅខាងឆ្វេងដៃគឺមានឈ្មោះនៃអថេរនិងសញ្ញា

ក្បៀសដែលមានដូចខាងក្រោមនេះ:

int i;

Circle c;

ពេល​អ្នកនឹងហៅឡើងវិញ អ្នកអាចប្រើតំលៃនៃអថេរមួយគត់បន្ទាប់ពី អ្នកបានបង្កើតច្បាស់លាស់ពីអថេរមានតំលៃច្បាស់លាស់:

int i;

Console.WriteLine(i); // error:use of unassigned local variable

លទ្ធផលដែលមានសំរាប់អថេរទាំងអស់ ទោះបីជាប្រភេទណាក៏ដោយ:

Circle c;

Console.WriteLine(c); // error: use of unassigned local variable

 

តាមពិត វាធ្វើអោយមានតំលៃច្បាស់លាស់: អ្នកទើបតែផ្តល់អោយវា តំលៃជាក់លាក់ដូចជា 42:

· អ្នកអាចបង្កើតអថេរ i ពេលដែលអ្នកប្រកាស declare វា:

int i = 42;

Console.WriteLine(i);

· អ្នកអាចផ្តល់ i តំលៃមួយក្រោយពេលអ្នកប្រកាស declare វា:

int i;

i = 42;

Console.WriteLine(i);

ឥឡូវនេះអ្នកមានបញ្ហាមួយ : អ្នកមិនអាចធ្វើអោយច្បាស់លាស់ ពីឈ្មោះនៃប្រភេទអថេរ c គឺជាតំលៃពិតដែលបានផ្តល់ដោយប្រើដំណោះស្រាយ

នេះពីព្រោះ c គឺជា Circle ហើយវាមិនមាន syntax ផ្តល់ទៅអោយតំលៃ Circle ដោយផ្ទាល់ ។ ប្រភេទ primitive ដែលមានតំលៃត្រឹមត្រូវ ។ អ្វីដែលអ្នក បានធ្វើគឺប្រើសំរាប់ពាក្សគន្លឹះ new រួចហៅ Circle របស់ constructor:

new Circle()

លទ្ធផលបង្ហាញដូចខាងក្រោមនេះ:

· You can initialize c to an object as you declare it:

Circle c = new Circle();

Console.WriteLine(c);

· You can assign an object to c after you declare it:

Circle c;

c = new Circle();

Console.WriteLine(c);

constructor គឺជាវិធីពិសេសមានឈ្មោះតែងតែមាន class នៅជា

មួយវា។ ប្រសិនបើអ្នកមិនបានសរសេរ constructor សំរាប់ class របស់អ្នក សំរាប់សរសេរ compiler ។ ម្យ៉ាងទៀត Circle class ដើមដែលបានបង្ហាញ ដើម្បីផ្ទុក method មួយនិង field មួយ តាមពិតផ្ទុក invisible constructor បានប្រសើរដូចជា class ដែលសរសេរខាងក្រោមនេះ:

class Circle

{

public Circle()

{

radius = 0.0;

}

public double Area()

{

return 3.141592 * radius * radius;

}

private double radius;

}

ប្រើវិធី Overloading Constructor

អ្នកអាចប្រកាស declare អថេរ Circle បង្កើត Circle object របស់វា និងពេលហៅ Area method:

Circle c = new Circle();

Console.WriteLine(c.Area());

 

ម្យ៉ាងទៀត អ្នកអាចសរសេរ constructor កម្មសិទ្ធិផ្ទាល់របស់អ្នកជា មួយតំលៃកាំរង្វង់ដូចជាអង្កត់ផ្ចិតរង្វង់ ។ ព្រោះ constructor ទាំងអស់មាន

ឈ្មោះដូចគ្នា ដូចជា class របស់វានិងមិនមានប្រភេទ return ដែលក្នុង Circle class ឥឡូវនេះមានដូចជា:

class Circle

{

public Circle(double initialRadius)

{

radius = initialRadius;

}

public double Area()

{

return? 3.141593 * radius * radius;

}

private double radius;

}

ក្នុងលំហាត់ខាងក្រោមនេះ អ្នកនឹងធ្វើការជាមួយ console application ក្នុងនោះអ្នកនឹងប្រកាស class ជាមួយនិងពីរ public constructor និងពីរ private field។ អ្នកនឹងបង្កើត instance នៃ class ដោយប្រើពាក្យគន្លឹះ និងហៅ constructor។

សរសេរ constructor និងបង្កើត object

1. ចាប់ផ្តើមចូលក្នុង Microsoft Visual Studio .NET ។

2. បើក Classes project ដែលមានទីតាំងក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 7\Classes folder ក្នុង My Documents folder ។ Classe project ត្រូវបានបើក ។

3. ក្នុង Code pane នៃសន្លឹក Code And Text Editor ទីតាំង Main method នៃកម្មវិធីប្រើប្រាស់ Application class ដោយមិនមាន Point.cs file ។ Main method គឺជាកន្លែងចាប់ផ្តើមរត់កម្មវិធី ។

4. ក្នុង Code pane ដែលមានទីតាំង Point class។ ចំណុច Point class ទទេរ ។ ពីព្រោះអ្នកមិនបានសរសេរ constructor ដែល compiler នឹងសរសេររបស់អ្នក ។ អ្នកអាចហៅ compiler-generated constructor នេះដែលអ្នកនឹងធ្វើឥឡូវនេះ។

5. ក្នុង Code pane មានទីតាំងក្នុង Entrance method នៃកម្មវិធីប្រើ ប្រាស់ Application class ។ រៀបរៀង Edit Entrance method ដើម្បីផ្ទុក statement ខាងក្រោមនេះ:

Point origin = new Point();

6. នៅលើ Build menu ចុចលើ Build Solution ។

code builds ដោយគ្នាន error ។  ការបង្ហាញដែល compiler ត្រូវ

បានសរសេរ default constructor សំរាប់ Point class ។

7. ក្នុងប្រអប់ Code pane ទីតាំង Point class ។ ការរៀបរៀង Edit Point class ផ្ទុកក្នុង public constructor ដែលអនុញ្ញាតទៅក្នុង int ពីរ arguments ។ ក្នុង constructor នេះនឹងហៅ Console.WriteLine ដើម្បីមើលតំលៃនៃ arguments ទៅ console  ចំណុច Point class នឹងមើលឃើញពិតប្រាកដដូចជានេះ:

class Point

{

public Point(int x, int y)

{

Console.WriteLine(“x:{0}, y:{1}”, x, y);

}

}

8. នៅលើ Build menu ចុចលើ Build Solution ដែលមាន error:

No overload for method ‘Point’takes ‘0’ arguments

9. ក្នុងប្រអប់ Code pane ទីតាំងនៅក្នុង Point class ។ រៀបរៀង Edit Point class ដើម្បីផ្ទុក public default constructor ។

ចំណុច Point class នឹងបង្ហាញយ៉ាងពិតប្រាកដ៏ដែលមើលឃើញ:

Class Point

{

public Point()

{

Console.WriteLine(“default constructor called”);

}

public Point(int x, int y)

{

Console.WriteLine(“x:{0}, y:{1}”, x, y);

}

}

10. ក្នុង Code pane ទីតាំងក្នុង Entrance method នៃកម្មវិធីប្រើ

ប្រាស់ Application class ។ រៀបរៀង Edit នៃ Entrance method ដូច្នេះវាផ្ទុក contains ក្នុង statement មួយដែលប្រកាស declares អថេរមួយដែលហៅថា bottomRight នៃប្រភេទ Point និង initializes របស់វាទៅក្នុង Point object ថ្មី ។

10. Point object ត្រូវបានបង្កើតដែលហៅថា Point constructor ដែលអនុញ្ញាតអោយ int arguments ពីរគឺ 600 និង 800 ។ Entrance method នឹងមើលឃើញពិតប្រាកដដូចខាងក្រោមនេះ:

static void Entrance()

{

Point origin = new Point();

Point bottomRight = new Point(600,800);

}

11. នៅលើ Debug menu ចុចលើ Start Without Debugging ។

code ឥឡូវចាប់ផ្តើម builds ដោយគ្មាន errors និងរត់ដំណើរការ ដែលមាន messages សរសេរទៅ console (ហើយ message ចុងក្រោយដោយ Visual Studio .NET):

default constructor called

x:600, y:800

Press any key to continue

12. ចុចលើ key ណាមួយ ។ បិទសន្លឹក console window រួចហើយ អ្នកត្រឡប់ទៅក្នុងកម្មវិធី Visual Studio .NET ។ អ្នកនឹងបន្ថែម  add ទៅ int fields ទៅក្នុង Point class រួចហើយផ្លាស់ប្តូរ constructors ទៅក្នុង initialize fields ទាំងនេះ ។

13. រៀបរៀង Edit Point class ទៅក្នុង contain ពីរគឺ private instance fields ដែលហៅថា x និង y នៃប្រភេទ int ។

13. ព្រោះ fields ទាំងនេះគឺជា private ដែលឈ្មោះរបស់វានឹងចាប់

ផ្តើមជាមួយអក្សរតូច ។ ចំណុច Point class ឥឡូវនឹងបង្ហាញពិត ប្រាកដ៏ដូចនេះ :

class Point

{

public Point(int x, int y)

{

Console.WriteLine(“x:{0}, y:{1}”, x, y);

}

}

14. រៀនចំ default Point constructor ដើម្បីចាប់ផ្តើម x និង y ទៅ 0 :

class Point

{

public Point()

{

Console.WriteLine(“default constructor called”);

}

public Point(int x, int y)

{

Console.WriteLine(“x:{0}, y:{1}”, x, y);

}

}

ពីព្រោះ x និង y fields  គឺជា default ទៅ 0 អ្នកនឹងអាចជ្រើសរើស លុបចោល initialization នៃ x និង y ទៅ 0 ប្រសិនបើអ្នកចង់បាន (តាមពិតអ្នកនឹងនៅតែមាន declare default ទទេចំណុច Point constructor) ។  ការធ្វើអោយខូចប្រយោជន៏មួយទៀត fields default ទៅ 0, false ឬ null គឺជា unclear ទៅអ្នកណាមួយដែល

អាន code ថាតើ fields ទាំងនោះមានភាពងាយស្រួល ។

15. រៀបរៀង Edit ចំណុច Point constructor ទីពីរទៅ initialize x និង y fields ទៅអោយតំលៃនៃ x និង y parameters ។

ប្រសិនបើអ្នកមិនចង់ប្តូរឈ្មោះនៃ parameters ឬ fields ហើយ constructor ទីពីរនឹងមើលឃើញពិតប្រាកដ៏ដូចខាងក្រោមនេះ:

class Point

{

public Point(int x, int y)

{

x = x;

y = y;

}

private int x, y;

}

15. កាលណាសរសេរ x = x; ពេល x នៅខាងឆ្វេងដៃនឹងដោះស្រាយ បានត្រឹមត្រូវមធ្យោយបានដូច x នៅខាងស្តាំ ។

16. ប្តូរឈ្មោះនៃ parameters នៃ constructor ទីពីរទៅ initialX និង initialY ហើយកាលណាបានរៀបរៀង edit នៃ constructor

Constructor និងបង្ហាញយ៉ាងជាក់ច្បាស់ដូចខាងក្រោម:

class Point

{

public Point(int initialX, int initialY)

{

x = initialX;

y = initialY;

}

private int x, y;

}

17. នៅលើ Build menu ចុចលើ Build Solution ។ បញ្ជាក់ថា code compiles ដោយគ្មាន errors ឬ warnings ។

សរសេរនិងហៅ method

1. ក្នុង Edit Point class ដែលដាក់លើ public instance method ដែលហៅថា DistanceTo អនុញ្ញាតអោយ Point argument ទោល ដែលហៅម្យ៉ាងទៀតថា returns ពីរដង ។ DistanceTo method នឹងបង្ហាញដូចខាងក្រោមនេះ:

class Point

{

public double DistanceTo(Point other)

{

}

private int x, y;

}

2. ក្នុង Edit នៃ DistanceTo instance method ដើម្បីគណនាហើយ ត្រឡប់ចំងាយរវាង Point object ដែលចាប់ផ្តើមប្រើដើម្បីបង្កើតហៅ និង Point object ផ្ញើដូចជា parameter មួយ ។ ដើម្បីធ្វើការងារនេះ អ្នកនឹងត្រូវការដើម្បីគណនាភាពខុសគ្នា x មានភាពស្មើគ្នានិង y

3. Declare a local int variable called xDiff, and initialize it to the difference between x and other.x.

4. Declare តំបន់អថេរ int  ដែលហៅថា yDiff និង initialize វាខុស គ្នារវាង y និង y ផ្សេងទៀត ។  DistanceTo method នឹងបង្ហាញដូច នេះ:

class Point

{

public double DistanceTo(Point other)

{

}

}

4. ដើម្បីគណនាចំងាយ distance អ្នកត្រូវការធ្វើរឹសការ៉េ square root នៃផលបូកនៃការ៉េនៃ xDiff និងការ៉េនៃ yDiff ។ មធ្យោយងាយ ស្រួលដើម្បីធ្វើវាគឺប្រើ static Sqrt method នៃ Math class ។  DistanceTo method នឹងបង្ហាញដូចខាងក្រោមនេះ:

public double DistanceTo(Point other)

{

int xDiff = x – other.x;

int yDiff = y – other.y;

}

5. ទីតាំង Entrance method នៃកម្មវិធីប្រើប្រាស់ class ។ បន្ទាប់ពី declare និង initialize និងអថេរ bottomRight Point ការប្រកាស declare អថេរមួយដែលហៅថាចំងាយ distance នៃ ប្រភេទ double ។ Initialize អថេរ double នេះបញ្ជូនលទ្ធផល ដែល ទទួលកាលណាអ្នកហៅ DistanceTo method នៅលើ object ប្រភព ដើមនិងកាលណាអ្នកផ្ញើ bottomRight object ទៅវាដូច argument។

Entrance method នឹងបង្ហាញដូចខាងក្រោមនេះ:

static void Entrance()

{

Point origin = new Point();

Point bottomRight = new Point(1024, 1280);

double distance = origin.DistanceTo(bottomRight);

}

6.​បន្ថែម បួន statement ទៅ Entrance method ដែលសរសេរ តំលៃនៃចំងាយទៅ console ដោយប្រើ Console.WriteLine method ។ Entrance method នឹងបង្ហាញដូចនេះ:

static void Entrance()

{

Point origin = new Point();

Point bottomRight = new Point(1024, 1280);

double distance = origin.DistanceTo(bottomRight);

Console.WriteLine(“Distance is : {0}”, distance);

}

7. នៅលើ Debug menu ចុចលើ Start Without Debugging ។  code builds និងរត់ដំណើរការ ។

8. បញ្ជាក់ថាតំលៃ 1000 ត្រូវបានសរសេរទៅអោយសន្លឹក console

9. Edit ហៅទៅ DistanceTo method ដើម្បីហៅវា bottomRight object និងផ្ញើទៅប្រភពដើមដូច argument ។ Entrance method និងបង្ហាញឥឡូវនេះ:

static void Entrance()

{

Point origin = new Point();

Point bottomRight = new Point(1024, 1280);

double distance = origin.DistanceTo(bottomRight);

Console.WriteLine(“Distance is : {0}”, distance);

}

10. នៅលើ Debug menu ចុចលើ Start Without Debugging ។  ដើម្បីរត់ code builds ។

11. បញ្ជាក់តំលៃ 1000 គឺនៅតែសរសេរទៅសន្លឹក console ។

12. ចុចលើ key ណាមួយ សន្លឹក console បិទត្រឡប់ចូលទៅកម្មវិធី Visual Studio .NET ។

5.  ស្វែងយល់ពី static Method និង Data

ក្នុង .NET Framework រួមមាន class មួយដែលហៅថា Math ដែលផ្ទុកការប្រើប្រាស់អនុគមន៍របស់គណិតវិទ្យាជាច្រើនដូចជា Sin, Cos, និង Sqrt ។  វិធី methods ទាំងនេះគឺមិនត្រូវបានអនុវត្ត ដូចជា instance methods (instance method គឺជាវិធីមួយដែលត្រូវបានហៅនៅលើ object និងអនុញ្ញាត object ជារបស់ instance field) ។  ឧបមាថា Sqrt method នៃ Math class គឺជា instance method ។

class Math

{

public double Sqrt(double d) { … }

}

ប្រសិនបើ Sqrt គឺជា instance method នៃ Math អ្នកនឹងបង្កើតMath object ដើម្បីហៅទៅ Sqrt :

Math m = new Math();

double d = m.Sqrt(42.24);

ក្នុង C# វិធី methods ទាំងនេះត្រូវបានប្រកាស declare នៅក្នុង class ។  អ្នកហៅ static method ដោយប្រើឈ្មោះនៃ class និងមិនមែន ឈ្មោះ instance ។ គ្មាន instance ត្រូវបានទាមទារ របៀបប្រមាណវិធីនេះ

គឺ Math class ត្រូវបានប្រកាស declare:

public double Area()

{

return Math.PI * radius * radius;

}

បង្កើត static Field ជាមួយពាក្សគន្លឹះ const Keyword អ្នកនឹង ប្រកាស declare ដែល field គឺជា static ហើយវាមានតំលៃនឹងមិនអាចប្តូរបាន នៅខាងមុខ field ជាមួយនឹងពាក្សគន្លឹះ const keyword ។  const field មិនអាចប្រើដូចពាក្សគន្លឹះ static keyword អ្នកអាចប្រកាស declare field ដូចជា const កាលណា field គឺជា enum និងជាប្រភេទ primitive ឬក៏ string មួយ ។ ឧទាហរណ៍ ធ្វើបែបណាបានតំលៃពិត Math class ដែល

ប្រកាស PI ដូចជា const field (វាប្រកាស PI ទៅប្រព័ន្ធគោល 10 decimal):

class Math

{

public static double Sqrt(double d) { … }

}

Exception មួយមានតួនាទីកាលណា field ថេរមិនប្រែប្រួល constant ។  Circle class បានពីការធ្វើឡើងវិញដោយប្រើ Math.PI:

 សរសេរ  static member និងហៅ static method

1. ក្នុង Code pane ទីតាំងក្នុង Point class។

2. Add បន្ថែម private static field ដែលហៅថា objectCount នៃប្រភេទ int ទៅ Point class ។ Initialize វាទៅ 0 ដូចជាអ្នក

ប្រកាស declare វា ។

ក្នុង Point class នឹងមានដូចនេះ:

class Point

{

private int x, y;

private static int objectCount = 0;

}

2. លោកអ្នកអាចសរសេរពាក្យគន្លឹះ private និង static ក្នុងការបញ្ជា

3. Add បន្ថែម statement ទៅអោយ Point constructor ទាំងពីរ បង្កើន objectCount ។ ក្នុងពេលនីមួយៗត្រូវបានបង្កើត constructor របស់វា​នឹងហៅ។ ប្រសិនបើ objectCount គឺជា instance ដែល object នីមួយៗនឹងមាន objectCount ជាកម្មសិទ្ធិផ្ទាល់ខ្លួនរបស់ វានិងបង្កើត Point class នឹងបង្ហាញដូចនេះ:

class Point

{

public Point()

{

x = 0;

y = 0;

objectCount++;

}

public Point(int initialX, int initialY)

{

x = initialX;

y = initialY;

objectCount++;

}

private int x, y;

private static int objectCount = 0;

}

4. បន្ថែម public static method ទៅក្នុង Point class ដែលហៅថា ObjectCount ហើយត្រឡប់ទៅ int រួចហើយអនុញ្ញាតចូលដោយគ្មាន

Parameters ។ ការអនុវត្តវិធីនេះដើម្បីប្រើតំលៃត្រឡប់ objectCount  field ។ Point class និងបង្ហាញដូចនេះ:

class Point

{

public static int ObjectCount()

{

return objectCount;

}

}

ប្រសិនបើ ObjectCount method គឺជាវិធី instance method អ្នក

នឹងហៅ object តែមួយគត់រួចហៅបង្កើត object ដោយខ្លួនឯង បង្កើន objectCount static field ។

5. ទីតាំង Entrance method នៃ Application class ។

6. បន្ថែម statement មួយទៅអោយ Entrance method សំរាប់

សរសេរតំលៃត្រឡប់ពី ObjectCount method នៃ Point class ទៅ console ។ Entrance method នឹងឃើញជាក់ស្តែងដូចនេះ:

static void Entrance()

{

Point origin = new Point();

Point bottomRight = new Point(600, 800);

double distance = origin.distanceTo(bottomRight);

Console.WriteLine(“Distance is :{0}”, distance);

Console.WriteLine(“No of Point objects :{0}”, Point.ObjectCount());

}

6. ObjectCount method ត្រូវបានហៅថា Point ឈ្មោះ name នៃ  class នឹងមិនមានឈ្មោះនៅក្នុងអថេរ Point (ដូចប្រភពដើមឬ bottomRight) ។ ពីព្រោះវាមានពីរ Point objects ត្រូវបានបង្កើត ក្នុង

ពេលហៅ ObjectCount ហើយ method នឹងត្រឡប់ទៅតំលៃ 2 ។

7. នៅលើ Debug menu ចុចលើ Start Without Debugging ដើម្បី រត់ code builds ។

សង្ខេបជំពូកទី ៧

ប្រធានបទ

 

ការអនុវត្តន៍

 

Declare class សរសេរពាក្យគន្លឹះ class ដោយប្រើ ឈ្មោះនៃ class, បើកនិងបិទ សញ្ញាគាប methods និង fields នៃ class ត្រូវបានប្រកាស declare បើកនិងបិទ សញ្ញាគាប ។ឧទាហរណ៍:class Point

{

}

Declare constructor សរសេរ method ដែលមានឈ្មោះ ដូចជាឈ្មោះនៃ class ដែលមិនត្រឡប់ (មិនមាន ចំហទទេ) ។ ឧទាហរណ៍:class Point

{

public Point(int x, int y)

{

}

}

ហៅ constructor សរសេរពាក្សគន្លឹះថ្មីដោយហៅទៅConstructor ។ ឧទាហរណ៍:Point origin = new Point(0, 0);
Declare class method សរសេរពាក្សគន្លឹះ static មុនពេល ប្រកាស method ។ ឧទាហរណ៍:class Point{

public static int ObjectCount()

{

}

}

Access static field សរសេរឈ្មោះនៃ class បន្ទាប់មក ចុច dot បន្ទាប់មកដោយប្រើឈ្មោះ នៃ static field ។ ប្រសិនបើអនុញ្ញាត ប្តូរក្នុង method នៃ class អ្នកអាចប្រើឈ្មោះ static field ។ ឧទាហរណ៍:double area = Math.PI * radius * radius

 

 

 

 

មេរៀនទី៨: Value និង Regerence

មេរៀនទី៨: Value និង Regerence

ក្នុងជំពូកនេះអ្នករៀនពីរបៀប:

-Copy តំលៃ Value អថេរ

-Copy reference ប្រភេទអថេរ

-ប្រើពាក្យគន្លឹះ ref និង out ចូលទៅក្នុង argument នៃ method parameter។

-Box តំលៃ value ចាប់ផ្តើមឬដាក់អោយអថេរនៃប្រភេទ object ទៅ តំលៃ value ។

-Unbox តំលៃ value ដោយបោះចោល object reference ដែល សំដៅទៅក្នុង boxed value ។

1. Copy អថេរ int និង Class ប្រភេទ primitive ដូចជា int ត្រូវបានហៅថាជាប្រភេទតំលៃ ។ ពីព្រោះ ថាអថេរ int នេះគឺជាតំលៃចំនួនគត់ integer (ដូចជា 42) ។  យ៉ាងណាក៏ដោយ ប្រភេទ class ដូចជា Circle (ដែលបានសរសេរក្នុងជំពូកទី៧) មិនមានប្រភេទតំលៃ; ប្រភេទ reference របស់វា ។ អថេរ Circle មិនមាន ទុក “Circle value”; អ្វីដែលវាទុកគឺជា reference ទៅក្នុង Circle object ។ ម្យ៉ាង ទៀតប្រភេទតំលៃទុកតំលៃនិងប្រភេទ reference ទុកក្នុង reference។ ពីព្រោះមានមធ្យោយខុសគ្នាដាក់ទិន្នន័យ data ប្រភេទតំលៃគឺជួនកាល ហៅផ្ទាល់ direct type និង reference type ជួលពេលខ្លះហៅ indirect types ។ អ្នកត្រូវការដើម្បីស្វែងយល់ស៊ីជំរៅរវាងភាពខុសគ្នានៃប្រភេទតំលៃ value types និង reference type។ ការប្រត្តិបត្តិនៃការប្រកាស i ដូចជា int ដែល i ក្លាយជាឈ្មោះនៃអថេរ មួយដែលដាក់ក្នុងតំលែចំនួនគត់ integer ។ ប្រសិនបើអ្នកប្រកាស declare copy i ដូចជា int ផ្សេតទៀត វាក្លាយជាឈ្មោះនៃអថេរមួយដែលដាក់តំលៃ ចំនួនគត់ ។ ប្រសិនបើអ្នកជ្រើសរើស initialize ឬ assign copy i  ទៅ I និង copy i  និងដាក់តំលៃដូចគ្នា I ។  យ៉ាងណាក៏ដោយ តាមពិតការ copy i និង i បណ្តាលឡើងពីការដាក់តំលៃដូចគ្នា មិនធ្វើអោយមានការ Copy ពីរដង there នៃតំលៃ 42: មួយនៅខាងក្នុង i និងមួយទៀត copy I ។ Code ខាងក្រោមនេះ បង្ហាញច្បាស់លាស់ ។

int i = 42;// declare and initialize i

int copyi = i;// copyi contains a copy of the data in i

i++;// incrementing i has no effect on copy i;

ការប្រត្តិបត្តិនៃការប្រកាស c ដូចជា Circle (ឈ្មោះនៃ class មួយ) គឺមានភាពខុសគ្នាច្រើន ។ កាលណាអ្នកប្រកាស declare c ដូចជា Circle, c ក្លាយជាឈ្មោះនៃអថេរមួយដែលសំដៅលើ Circle object ។ ប្រសិនបើអ្នក

ប្រកាស declare refc ដូច Circle ផ្សេងទៀត វាក្លាយជាឈ្មោះនៃអថេរដែល សំដៅទៅលើ Circle object មួយ ។ ប្រសិនបើអ្នកជ្រើសរើស initialize

ឬ assign refc ទៅ c នោះ refc នឹងសំដៅលើ Circle object ដូចគ្នាដែល c ធ្វើ; មាន Circle object តែមួយគត់ និង refc និង c ទាំងពីរសំដៅលើវា ។ ខាងក្រោមនេះជា code ឧទាហរណ៍:

Circle c = new Circle(42);

Circle refc = c;

មើលក្នុង diagram ទាំងពីរឧទាហរណ៍ខាងក្រោមនេះ:
a

ប្រើតំលៃ value parameter និង reference parameter

1. ចាប់ផ្តើមចូលក្នុង Start Microsoft Visual Studio .NET

2. បើក Parameter project ដែលមានទីតាំងក្នុង\Microsoft Press\Visual C# Step by Step\Chapter 8\Parameters folder ក្នុថ My Documents folder របស់អ្នក Parameters project បានបើកឡើង ។

3. បើក Pass.cs ប្រភព file ក្នុង Code pane នៃ Code និងសន្លឹក Text Editor រួចក្នុងទីតាំង Pass class ។ បន្ថែម public static method ដែលហៅថាតំលៃ Pass class ។ វិធី method នេះនឹង អនុញ្ញាតអោយមាន int parameter ទោល (ប្រភេទតំលៃ) ដែលហៅថា param ហើយនឹងត្រឡប់ទទេ ។  តំលៃនឹងផ្តល់អោយគឺ 42 ទៅ param ។ Pass class នឹងមើលឃើញច្បាស់លាស់ដូចខាង

ក្រោមនេះ:

namespace Parameters

{

class Pass

{

public static void Value(int param)

{

param = 42;

}

}

}

4. បើកប្រភព file Main.cs នៅក្នុង Code pane រួចមើលទីតាំង Entrance method នៃ Application class ។  Main method គឺជា កន្លែងដាក់កម្មវិធីចាប់ផ្តើមដំណើរការ Main method ផ្ទុក statement តែមួយគត់ : ដើម្បីហៅ Entrance ដែលត្រូវបានបញ្ចូលទៅក្នុងបណ្តុំ try បន្ទាប់មកចាប់ catch handler ។

5. បន្ថែម 4 statements ទៅក្នុង Entrance method ។ មុនដំបូង នឹងប្រកាស Declare តំបន់អថេរ int ដែលហៅថា i  និង initialize វា ទៅជា 0 ។  statement ទីពីរនឹងសរសេរតំលៃនៃ i ដើម្បីconsole ។ statement ទីបីនឹងហៅតំលៃ Pass.Value ផ្ញើទៅ i ដូចជា argument និង statement ទីបួននឹងសរសេរម្តងទៀតតំលៃនៃ i ទៅ console ។ ហៅទៅ Console.WriteLine មុននិងបន្ទាប់ហៅទៅ Pass.Value អនុញ្ញាតអោយអ្នកមើលឃើញ Pass.Value ប្តូរតំលៃនៃ I  ntrance method នឹងបង្ហាញដូចខាងក្រោមនេះ:

static void Entrance()

{

int i = 0;

Console.WriteLine(i);

Pass.Value(i);

Console.WriteLine(i);

}

6. នៅលើ Debug menu ចុចលើ Start Without Debugging ។

shortcut key សំរាប់ចាប់ផ្តើមចូលក្នុង Without Debugging គឺចុចលើ Ctrl+F5 ដើម្បី builds និងរត់កម្មវិធី ។

7. បញ្ជក់តំលៃ 0 ត្រូវបានសរសេរទៅសន្លឹក console ពីរដង ។

8. បើកប្រភពដើម file WrappedInt.cs នៅក្នុង Code pane រួចសរសេរក្នុងទីតាំង WrappedInt class ។ បន្ថែម public instance field ដែលហៅថាចំនួននៃប្រភេទ int  ទៅក្នុង WrappedInt class ។

WrappedInt class នឹងមើលឃើញដូចខាងក្រោមនេះ:

namespace Parameters

{

class WrappedInt

{

public int Number;

}

}

9. បើកប្រភពដើម file Pass.cs នៅក្នុង Code pane រួចហើយក្នុង ទីតាំង Pass class ។ បន្ថែម public static method ដែលហៅថា Reference ទៅក្នុង Pass class ។ វិធីនេះនឹងអនុញ្ញាតអោយបាន WrappedInt parameter ទោល ដែលហៅថា param និងប្រភេទ return type ទទេ ។ Reference នឹងផ្តល់ 42 ទៅ param.Number Pass class នឹងបង្ហាញដូច ខាងក្រោមនេះ:

namespace Parameters

{

class Pass

{

public static void Value(int param)

{

param = 42;

}

public static void Reference(WrappedInt param)

{

param.Number = 42;

}

}

}

10. បើកក្នុង file ប្រភពដើម Main.cs ក្នុង Code pane រួចនៅទីតាំង Entrance method នៃ Application class ។

11. បន្ថែម បួន statements ទៅ Entrance method ។ ដែល

statement នឹងប្រកាសតំបន់នៃអថេរ WrappedInt ដែលហៅថា wi និង initialize វាដើម្បីបាន WrappedInt object ថ្មីដែលហៅថា  default constructor ។  statement ទីពីរនឹងសរសេរតំលៃនៃ wi ចំនួនទៅក្នុង console ។ statement ទីបី នឹងហៅ Pass.Reference method ដែលផ្ញើ wi ដូចជា argument មួយ ។ និង statement ទីបួននឹងសរសេរម្តងទៀតតំលៃ wi.Number ទៅក្នុង console ។

Entrance method នឹងបង្ហាញដូចខាងក្រោមនេះ:

static void Entrance()

{

int i = 0;

Console.WriteLine(i);

Pass.Value(i);

Console.WriteLine(i);

WrappedInt wi = new WrappedInt();

Console.WriteLine(wi.Number);

Pass.Reference(wi);

Console.WriteLine(wi.Number);

}

12. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ កម្មវិធី builds និងរត់ដំណើរការ ។ ដូចមុនពេលតំលៃពីរដំបូងដែលបាន

សរសេរទៅក្នុងសន្លឹក console គឺ 0 ហើយ 0 មុននឹងបន្ទាប់ហៅទៅ Pass.Value ។

13. សំរាប់តំលៃទីពីរបន្ទាប់ ដែលទាក់ទងគ្នាទៅនឹងតំលៃ wi មុននឹង

បន្ទាប់ Pass.Reference បញ្ជក់ថាតំលៃនៃ 0 ហើយនឹងតំលៃនៃ 42 ត្រូវបានសរសេរទៅក្នុងសន្លឹក console ។ តំលៃនៃ wi.Number គឺជា initialized to 0 ដោយ default constructor ។

2. ប្រើ ref និង out Parameter

ក្នុងលំហាត់ពីមុន អ្នកបានឃើញកាលណាអ្នកបានផ្ញើ argument មួយទៅអោយ method មួយដែលមាន parameterត្រូវបានចាប់ផ្តើមដូចជា copy នៃ argument ។  ការរៀបចំនេះមានន័យថាវាមិនអាចធ្វើទៅបានដើម្បី ប្តូរ parameter មានឥទ្ធិពលលើ argument ឧទាហរណ៍:

static void DoWork(int param)

{

param++;

}

static void Main()

{

int arg = 42;

DoWork(arg);

Console.WriteLine(arg); // writes 42 not 43

}

បង្កើត ref Parameter

ប្រសិនបើ parameter នៅខាងមុនជាមួយពាក្យគន្លឹះ ref ដែល parameter ក្លាយជាឈ្មោះប្តូរសំរាប់ argument នៅពេល copy argument. ឈ្មោះប្តូរប្រព័ន្ធនេះមានន័យថាបញ្ហាដែលអ្នកធ្វើក្នុង parameter អ្នកធ្វើដោយ automatically ទៅក្នុង argument ពីព្រោះ parameter គឺជាឈ្មោះប្តូររបស់ argument ។ កាលណាអ្នកបានផ្ញើ argument មួយទៅក្នុង ref parameter អ្នកត្រូវតែនៅពីរមុន argument ជាមួយពាក្សគន្លឹះ ref

static void DoWork(ref int param)//using ref

{

param++;

}

static void Main()

{

int arg = 42;

DoWork(ref arg);//using ref

Console.WriteLine(arg);//writes 43

}

ឧទាហរណ៍ ក្នុងឧទាហរណ៍បន្ទាប់ arg គឺមិនត្រូវបានចាប់ផ្តើម initialized ហើយឧទាហរណ៍មិនធ្វើ compile ។  ការ​មិនបានជោគជ័យ failure គឺព្រោះមកពី param++ នៅក្រៅតំលៃពិត arg++​ហើយ arg++ គឺ អនុញ្ញាត arg តែមួយគត់មានន័យច្បាស់លាស់:

static void Value(ref int param)

{

param++;

}

static void Main()

{

int arg; // not initialized

Value(ref arg);

Console.WriteLine(arg);

}

បង្កើត out Parameters

ពាក្សគន្លឹះ out គឹប្រហាក់ប្រហែលនិង ref ។ អ្នកអាចប្រើ parameter នៅខាងមុនជាមួយពាក្សគន្លឹះ out  នេះមានន័យថា parameter ក្លាយជាឈ្មោះកែប្រែបានសំរាប់ argument ។ អ្នកអាចធ្វើវាដោយ automatically ទៅក្នុង argument ព្រោះថា parameter គឺជាឈ្មោះប្តូរកែប្រែសំរាប់ argument ។ កាលណាអ្នកបានផ្ញើ argument មួយទៅ out parameter អ្នកត្រូវតែមាន  argument នៅខាងមុខជាមួយពាក្សគន្លឹះ out ។ ភាពខុសគ្នារវាង ref parameter និង out parameter គឺជាវិធី method មិនអាចធ្វើដើម្បីផ្តល់តំលៃទៅ ref parameter ប៉ុន្តែវាផ្តល់តំលៃទៅ out parameter ។ ម្យ៉ាងវិញទៀត ឧទាហរណ៍ខាងក្រោមនេះមិនអាច compile បានព្រោះមិនអាចផ្តល់តំលៃ param:

static void DoWork(out int param)

{

// Do nothing

}

យ៉ាងណាក៏ដោយ ឧទាហរណ៍ខាងក្រោមនេះធ្វើ compile ពីព្រោះតំលៃ ទៅតំលៃ param:

static void DoWork(out int param)

{

param = 42;

}

ព្រោះថា out parameter ត្រូវតែផ្តល់តំលៃ អ្នកអនុញ្ញាតដាក់នៅខាង ក្រោយវាទៅក្នុង argument ដែលមិនបានកំណត់ច្បាស់លាស់ផ្តល់អោយ ។ កាលណា method បានបញ្ចប់ argument ត្រិះរិះកំណត់ច្បាស់លាស់ និងតំលៃ

របស់វាដើម្បីអាន ឧទាហរណ៍:

static void DoWork(out int param)

{

param = 42;

}

static void Main()

{

int arg; // not initialized

DoWork(out arg);

Console.WriteLine(arg); // writes 42

}

ប្រើ ref parameter

1. បើកក្នុង Parameters project ដែលមានទីតាំងក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 8\Parameters folder ក្នុង My Documents folder របស់អ្នក ។

2. បើក file ប្រភពដើម Pass.cs ក្នុង Code pane រួចមើលក្នុងទីតាំង តំលៃ method ក្នុង Pass class ។

3. ក្នុង Edit តំលៃ method អនុញ្ញាតទៅក្នុង int argument ដូចជា ref parameter ។ តំលៃ នឹងបង្ហាញដូចខាងក្រោមនេះ:

class Pass

{

public static void Value(ref int param)

{

param = 42;

}

}

4. បើកក្នុងប្រភព file ដើម Main.cs ក្នុង Code pane មើលក្នុងទីតាំង Entrance method នៃ Application class ។ ក្នុង Edit មាន statement ទីបីនៃ method នេះដែលមាន Pass.Value method ហៅផ្ញើ argument របស់វាដោយ ref ។ Entrance metho នឹងបង្ហាញ

ដូចខាងក្រោមនេះlook exactly like this:

class Application

{

static void Entrance()

{

int i = 0;

Console.WriteLine(i);

Pass.Value(ref i);

Console.WriteLine(i);

}

}

4. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ កម្មវិធី builds និងរត់ដំណើរការ ។

3. ប្រើ Stack និង Heap

ឥឡូវអនុញ្ញាតចូលឆ្លងកាត់ អ្វីដែលកើតឡើងបន្ទាប់ពី Method ត្រូវ

បានហៅ:

void Method(int param)

{

Circle c;

c = new Circle(param);

}

ឧបមាថាតំលៃដែលផ្ញើទៅអោយ param គឺជាតំលៃ 42 ។  ចំពោះ memory តូច (គឺមិនគ្រាប់គ្រាន់សំរាប់ប្រើ int) ដែលធ្វើអោយបាត់បង់ stack។ នេះគឺ param ដែលជាអត្ថិភាព ។ តំលៃនៅខាងក្នុងតូចបំផុត stack memory ត្រូវ

បានចាប់ផ្តើម ក្នុង 1 bit បង្ហាញក្នុងតំលៃ int 42 ។

Memory តូច (មិនគ្រប់គ្រាន់សំរាប់ reference មួយ) ដែលទទួលពីក្នុង stack ។ តំលៃនៅខាងក្នុង stack memory តូចត្រូវបានចាប់ផ្តើមទៅតំលៃ ដែលយោងទៅតាមលក្ខណ:ពិសេសរបស់ heap memory កន្លែងដែល Circle មានរួចស្រេច ។ Circle constructor នឹងឆ្លងកាត់ exception មួយ ។ ប្រសិន បើវាធ្វើ memory មាននៅក្នុង Circle object នឹងទាញយកតំលៃត្រឡប់មកវិញ ដោយ constructor នឹងមាន null reference ។ ពេលអនុគមន៍ទាំងអស់បញ្ចប់ ។  parameters និងតំបន់អថេរចេញក្រៅនៃ scope ។ memory ទទួល សំរាប់ c ដោយ automatically ចុងបញ្ចប់ទៅដល់ stack ។

4. អ្វីគឺជា System.Object Class

មួយក្នុងចំណោមច្រើនដែលមានសារ:សំខាន់បំផុតគឺ Object class ក្នុងប្រព័ន្ធ System namespace របស់ Microsoft.NET Framework:

វាដូចជាមានសារះសំខាន់ class ដែលពាក្យគន្លឹះ object  គឺតាមពិត ជាឈ្មោះដែលអាចប្តូរបានក្នុង System.Object ។ ក្នុង code របស់អ្នក អ្នកអាចសរសេរ object ឬអ្នកអាចសរសេរ System.Object; វាមានន័យច្បាស់

លាស់ ។ គ្រប់ classes ទាំងអស់មានភាពមិនច្បាស់លាសដែលទទួលពី System.Object class ។ អ្នកមិនត្រូវការដើម្បី declare ក្នុង class របស់អ្នក

ដែលបានមកពី System.Object (ទោះបីអ្នកអាចប្រសិនបើអ្នកចង់ធ្វើ) ។ តាម ពិត class របស់អ្នកគឺជា class ដែលមានន័យវាបានផ្តល់ដោយ automatically ពី System.Object ។  ម្យ៉ាងទៀតប្រសិនបើអ្នកសរសេរដូច

នេះគឺ :

class Circle

{

}

តាមពិតអ្នកសរសេរដូចនេះ :

class Circle : System.Object

{

}

ឧទាហរណ៍ខាងក្រោមនេះ អថេរ c និង o ទាំងពីរនេះយោងតាម Circle object ។ តាមពិតប្រភេទនៃ c គឺជា Circle និងប្រភេទ o គឺជា object (ឈ្មោះអាចប្តូរ System.Object) ក្នុងការអនុវត្តមានពីរប្រភេទខុសគ្នា “views” នៃ object ដូចគ្នា:

Circle c;

c = new Circle(42);

object o; o = c;
a

5. Boxing

ដូចដែលអ្នកបានឃើញ អថេរប្រភេទ object យោងតាម object នៃ ប្រភេទ reference នីមួយៗដែលវាអាចទៅដល់ instance នៃ class មួយ ។ ទោះបីជាអថេរប្រភេទ object អាចយោងទៅតាមតំលៃនៃប្រភេទនីមួយៗ ។ ឧទាហរណ៍ ខាងក្រោមនេះមានពីរ statements initialize អថេរ i (ប្រភេទ int តំលៃប្រភេទ) 42 និង initialize អថេរ o (ប្រភេទ object និងប្រភេទ reference type) ទៅ i:

int i = 42;

object o = i;

អ្នកគួរចងចាំថា i គឺជាប្រភេទតំលៃហើយវាមានរួចស្រេចក្នុង stack ។ ប្រសិនបើ reference នៅក្នុង o ទៅ I នោះ reference នឹងទៅដល់ stack ។ ជំនួសអោយតំលៃ copy នៃតំលៃនៅខាងក្នុងនៃតំលៃ i ត្រូវបានបង្កើត heap និង reference នៅក្នុង o យោងទៅតាម copy ។
a

6. Unboxing

ព្រោះអថេរនៃប្រភេទ object យោងទៅតាម boxed copy នៃតំលៃ វាសមហេតុផលអនុញ្ញាតអោយអ្នកទទួលតំលៃ boxed ឆ្លងកាត់អថេរ ។ អ្នក

អាចជឿជាក់ថាមានលទ្ធភាពដើម្បីអនុញ្ញាតទៅក្នុង boxed តំលៃ int ដែលអថេរ o ដោយប្រើ int i = o; ។ ទោះបីយ៉ាងណាក័ដោយ ប្រសិនបើអ្នកព្យាយាម syntax នេះអ្នកនឹងទទួលបាន compile time error ដូចឧទាហរណ៍ខាង

ក្រោមនេះ example:

Circle c = new Circle();

int i = 42;

object o;

o = c; // o refers to a circle

i = o; // what is stored in i?

អ្នកប្រើអ្វីដែលដឹងដូចជា cast សំរាប់អនុវត្តន៍ទៅប្រភេទផ្សេងទៀត ។ អ្នកប្រើអថេរ object ដាក់នៅពីមុខឈ្មោះនៃប្រភេទរវាងសញ្ញា //  ដូចបង្ហាញ

ក្នុងឧទាហរណ៍  :

int i = 42;

object o = i; // boxes

i = (int)o; // compiles okay

 

ទោះជាយ៉ាងណាក៏ដោយ ប្រសិនបើ o មិនធ្វើក្នុង boxed int មាន ប្រភេទមិនត្រូវគូរ mismatch ដែលបណ្តាលមកពីបោះចោលបរាជ័យ fail និងមិនត្រឡប់មកវិញ ។ ជំនួស compiler ដែលបោះចោល InvalidCastException ។ ឧទាហរណ៍ នៃ unboxing cast ដែល fails:

Circle c = new Circle(42);

object o = c; // doesn’t box because Circle is a class

int i = (int)o; //compiles okay,but throws

មេរៀនទី១០: Value និង Struct

មេរៀនទី១០: Value និង Struct

ក្នុងជំពូកនេះរៀនអំពីរបៀបធ្វើ:

-ប្រកាស Declare ប្រភេទការរាប់ enumeration

-បង្កើតនិងប្រើតំលៃនៃប្រភេទការរាប់ enumeration

-ប្រកាស Declare ប្រភេទ struct

-បង្កើតនិងប្រើតំលៃនៃប្រភេទ struct ។

1. ធ្វើការជាមួយការរាប់ Enumeration

ឧបមាថាអ្នកចង់បង្ហាញខែឆ្មាំក្នុងកម្មវិធី ។ អ្នកនឹងប្រើចំនួនគត់ 0, 1, 2, និហ 3 ដើម្បីតំណាង spring, summer, fall និង winter ។ ប្រព័ន្ធ system នេះនឹងធ្វើការប៉ុន្តែវាមិនប្រកបដោយអព្ភន្តញ្ញាណ និងបរាជ័យក្នុងពេលបង្ហាញ បញ្ហានេះ ។ ប្រសិនបើអ្នកប្រើចំនួនគត់តំលៃ 0 ក្នុង code វានឹងមិនជាធ្ងន់ធ្ងរនិង មានលក្ខណ:ពិសេស 0 ដែលបង្ហាញ spring ។ វានឹងមិនអាចជាដំណោះ

ស្រាយច្បាស់លាស់ ។ ឧទាហរណ៍ បញ្ហានឹងបញ្ឈប់ពេលដែលអ្នកប្រើតំលៃ ចំនួនគត់ខណ:ពេលដែល សរសេរ 0, 1, 2, និង​3 ។ ប្រើក្នុង C# គឺជាដំណោះ ស្រាយល្អប្រសើរ អ្នកអាចប្រើពាក្យ គន្លឹះ enum ដើម្បីបង្កើតប្រភេទការរាប់ (ជួនពេលខ្លះដែលហៅថាប្រភេទ enum) ដែលជាតំលៃកំណត់សំរាប់បង្កើត នៃឈ្មោះនិមិត្តរូប ។

ប្រកាសប្រភេទការរាប់ របៀបប្រការប្រភេទការរាប់ដែលហៅថា Season ដែលមានតំលៃត្រឹម ត្រូវគឺកំណត់ដោយឈ្មោះនិមិត្តិសញ្ញា Spring, Summer, Fall និង Winter:    enum Season{Spring,Summer,Fall,Winter} ឈ្មោះនិមិត្តិសញ្ញាត្រូវតែបង្ហាញជាគូរនៅក្នុងសញ្ញា braces ក្នុងសញ្ញា ក្បៀស ។  ការជ្រើសរើសការរាប់តំលៃការរាប់នីមួយៗបានបង្កើតតំលៃរួមជាមួយ

ធាតុប្រើ default ចំនួនចាប់ផ្តើម 0 សំរាប់ធាតុទីមួយក្នុងជំហាន 1 ។ អ្នកអាចប្រើ ប្រមូលចំនួនគត់ថេរ (ដូចជា 1) ជាមួយការរាប់ (ដូចជា Spring) ឧទាហរណ៍ បង្ហាញខាងក្រោមនេះ:

enum Season{Spring = 1,Summer, Fall,Winter}

ក្នុង version ខាងលើរបស់ Season តំលៃនៅក្រោម Spring, Summer, Fall និង Winter គឺជា 1, 2, 3 និង 4 ។ ខាងក្រោមនេះ version របស់ Season, Spring, Summer, Fall និង Winter មានតំលៃ 0, 1, 2 និង 3:

enum Season {Spring, Summer, Fall, Winter}

អ្នកអនុញ្ញាតផ្តល់ការរាប់ច្រើនឬមួយមានតំលៃនៅខាងក្រោមដូចគ្នា ឧទាហរណ៍ នៅក្នុងចក្រភពអង់គ្លេស United Kingdom ខែ fall ដែលហៅថា autumn ដែលអ្នកអាចសរសេរ code ដូចខាងក្រោមនេះ:

enum Season {Spring,Summer,Fall,Autumn= Fall, Winter }

 ជ្រើសរើសតំលៃមូលដ្ឋានរបស់តារាងការរាប់

កាលណាអ្នកប្រកាស declare ប្រភេទការរាប់ត្រឹមត្រូវតាមតំលៃដែល ផ្តល់អោយ int ។ ម្យ៉ាងវិញទៀតតំលៃខាងក្រោម defaults ទៅក្នុង int ។ អ្នក អាចជ្រើសរើសមូលដ្ឋានប្រភេទការរាប់របស់អ្នក ។ ឧទាហរណ៍ ដើម្បីប្រកាស declare ដែលមានប្រភេទខាងក្រោមរបស់ Season ដូចជាតំលៃតិចជាង int អ្នកអាចសរសេរ:

enum Season : short{Spring,Summer,Fall,Winter}

អ្នកអាចប្រើមូលដ្ឋានក្នុងការរាប់លើចំនួន 8 ប្រភេទចំនួនគត់ integer: byte, sbyte, short, ushort, int, uint, long ឬ ulong ។ គ្រប់តំលៃទាំងអស់ ការរាប់ត្រូវតែបំពេញនៅក្នុងលំដាប់ជួរដែលបានជ្រើសរើសមូលដ្ឋានប្រភេទ ។ ឧទាហរណ៍ ខាងក្រោមនេះនឹងបង្កើត compile-time error ពីព្រោះ byte.MaxValue + 1 គឺនៅក្រៅលំដាប់ range នៃ byte:

enum Season : byte{Spring,Summer,Fall,Winter = byte.MaxValue +1}

 ការប្រើប្រាស់ Enumeration ម្តងទៀតអ្នកត្រូវបានប្រកាស declare ប្រភេទការរាប់របស់អ្នក ។ អ្នកអាចប្រើឈ្មោះនៃការរាប់ដូចជាឈ្មោះប្រភេទពិតប្រាកដ៏ដូចជាប្រភេទផ្សេង ទៀត ។ ប្រសិនបើ Season គឺជាឈ្មោះរបស់ប្រភេទការរាប់ បួន អ្នកអាចបង្កើត អថេរនៃប្រភេទ Season និង parameters នៃប្រភេទ Season ដូចបង្ហាញក្នុង ឧទាហរណ៍នេះ:

enum Season { Spring, Summer, Fall, Winter }

class Example

{

public void Method(Season parameter)

{

Season localVariable;

}

private Season currentSeason;

}

ប្រភេទការរាប់គឺជាប្រភេទតំលៃ ។ នេះមានន័យថាអថេរការរាប់ ចាប់ ដាក់តំលៃរបស់វាដោយផ្ទាល់នៅលើ stack ។ ការផ្តល់អោយកំណត់ច្បាស់

លាស់អនុវត្តទៅអថេរការរាប់ដែលទើបតែអនុវត្តទៅអថេរទាំងអស់ផ្សេងទៀត ។

Season colorful;

Console.WriteLine(colorful);//compile time error

មុនពេលអ្នកអាចប្រើតំលៃនៃអថេរការរាប់ enumeration variable វា ត្រូវតែកំណត់ចែងចែកតំលៃច្បាស់លាស់ ឧទាហរណ៍:

Season colorful = Season.Fall;

Console.WriteLine(colorful); // writes out ‘Fall’

ក្នុងលំហាត់ខាងក្រោមអ្នកនឹងធ្វើការជាមួយកម្មវិធីប្រើប្រាស់ console application និងប្រកាស declare ហើយនិងប្រើ enumeration class ដែល បង្ហាញពីខែ months នៃឆ្នាំ year ។

បង្កើតនិងប្រើប្រភេទការរាប់ enumeration type

1. ចាប់ផ្តើមចូល Start Microsoft Visual Studio .NET ។

2. បើក StructsAndEnums project ដែលមានក្នុងទីតាំង \Microsoft Press\Visual C# Step by Step\Chapter 9\StructsAndEnums folder ក្នុង My Documents folder របស់

អ្នក ពេលនោះ StructsAndEnums project បានបើកឡើង ។

3. ក្នុង Code pane បើក file ប្រភព Month.cs ។ ប្រភពដើមផ្ទុកក្នុង empty namespace ដែលហៅថា StructsAndEnums ។

4. ក្នុង Code pane បន្ថែមប្រភេទការរាប់ enumeration ដែលហៅថា Month នៅក្នុង StructsAndEnums namespace ។  12 តួព្យញ្ជន: ការរាប់របស់ខែ Month គឺ January ទៅដល់ December ។ Month enumeration នឹងបង្ហាញច្បាស់ដូចខាងក្រោមនេះ:

namespace StructsAndEnums

{

enum Month

{

January, February, March, April,

May, June, July, August,

September, October, November, December

}

}

5. ក្នុង Code pane បើកប្រភព file Main.cs រួចហើយក្នុងទីតាំងរបស់ Entrance method ។ ដូចលំហាត់ពីមុន Main method ហៅ Entrance method និងភ្ជាប់ exceptions ។ ក្នុង Code pane បន្ថែម statement មួយទៅអោយ Entrance method ដែលប្រកាស declares អថេរដែលហៅដំបូងនៃប្រភេទ Month និងចាប់ផ្តើមវាទៅ ក្នុង Month.January ។ បន្ថែម statement ផ្សេងទៀតដែលសរសេរ តំលៃនៃអថេរដំបូងទៅ console ។  Entrance method នឹងបង្ហាញ ដូចខាងក្រោមនេះ:

static void Entrance()

{

Month first = Month.January;

Console.WriteLine(first);

first++;

Console.WriteLine(first);

}

7. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ កម្មវិធី Visual Studio .NET builds និងរត់ដំណើរការ ។

8. បញ្ជាក់ថាពាក្យ January គឺត្រូវបានសរសេរទៅអោយ console ។

9. ចុចលើ key ណាមួយ សន្លឹក console បិទអ្នកនឹងត្រឡប់ទៅក្នុង កម្មវិធី Visual Studio .NET ។

2. ធ្វើការជាមួយប្រភេទ Struct

មានមធ្យោបាយជាច្រើនដើម្បីបង្កើតប្រភេទតំលៃកម្មសិទ្ធិក្នុង C# ។ អ្នក អាចប្រើពាក្យគន្លឹះ struct ។  ដែល struct (ពាក្យកាត់របស់ structure) អាច មាន fields, methods និង Constructors របស់វាជាកម្មសិទ្ធិផ្ទាល់ ។

ការប្រកាសប្រភេទ Struct

ដើម្បីប្រកាស declare ប្រភេទកម្មសិទ្ធិផ្ទាល់ struct អ្នកប្រើ struct បន្ទាប់មកមានឈ្មោះនៃប្រភេទ និង struct រវាងសញ្ញាបើក opening និង និងសញ្ញាបិទ closing brace ។ ឧទាហរណ៍ struct ដែលហៅម៉ោង Time ផ្ទុកក្នុង 3 public int fields ដែលហៅថា hours, minutes និង seconds:

struct Time

{

public int hours, minutes, seconds;

}

ឧទាហរណ៍ នរណាក៍អាចបង្កើតតំលៃនាទី minutes ឬ វិនាទី seconds ដែលធំជាង 60 ។ ប៉ុន្តែគំនិតល្អប្រសើរដើម្បីបង្កើត fields private និងផ្តល់ struct របស់អ្នកជាមួយ constructors និង methods ដូចបង្ហាញក្នុង ឧទាហរណ៍ខាងក្រោមនេះ:

struct Time

{

public Time(int hh, int mm, int ss)

{

hours = hh % 24;

minutes = mm % 60;

seconds = ss % 60;

}

public int Hours()

{

return hours;

}

private int hours, minutes, seconds;

}

ស្វែងយល់ពីការខុសគ្នារវាង Struct និង​ Class

struct និង class គឺជាប្រភេទដែលប្រហាក់ប្រហែលគ្នាមានសារ:

សំខាន់ខុសគ្នា ។  អ្នកមិនអាចប្រកាស declare default constructor (ដូចជា constructor មួយមិនមាន parameters) សំរាប់ប្រើជាមួយ struct ។ ឧទាហរណ៍ ខាងក្រោមនេះនិង compile ប្រសិនបើម៉ោង Time គឺជា class មួយប៉ុន្តែម៉ោង Time គឺជា struct មួយដែលវាបរាជ័យ fails ពេលធ្វើ compile:

struct Time

{

public Time() { … } //compile time error

}

ប្រសិនបើមិនបានធ្វើ initialize field ក្នុង class constructor មួយ នោះ compiler និង automatically initialize វាទៅ 0, false ឬ null ។ ទោះបីជាយ៉ាងណាក៏ដោយ ប្រសិនបើអ្នកមិនបានធ្វើ initialize field ក្នុង struct constructor ពេលនោះ compiler នឹងមិនចាប់ផ្តើម initialize សំរាប់ អ្នក ។ មានន័យថាអ្នកត្រូវតែចាប់ផ្តើមគ្រប់ fields ទាំងអស់ នៅក្នុង struct constructors ឬក៏អ្នកទទួលបាន compile-time error ។

struct Time

{

public Time(int hh, int mm)

{

hours = hh;

minutes = mm;

}// compile time error: seconds not initialized

private int hours, minutes, seconds;

}

ក្នុង class អ្នកអាចចាប់ផ្តើម initialize ក្នុងចំណុចនៃការប្រកាស ។ ក្នុង struct អ្នកមិនអាចធ្វើបាន  ។ ខាងក្រោមនេះជាឧទាហរណ៍ នឹង compile ប្រសិនបើ Time គឺជា class មួយប៉ុន្តែម៉ោង Time គឺជា struct វាបណ្តាលមក ពី compile-time error :

struct Time

{

private int hours = 0;// compile time error

private int minutes;

private int seconds;

}

ការប្រកាសអថេរ Struct

បន្ទាប់អ្នកបានប្រកាស declare ប្រភេទ struct របស់អ្នក អ្នកអាចប្រើ

ឈ្មោះនៃ struct ដូចជាឈ្មោះប្រភេទពិតនៅក្នុងប្រភេទផ្សេងទៀត ។ ប្រសិនបើ  ម៉ោង Time គឺជាឈ្មោះនៃប្រភេទ struct របស់អ្នក អ្នកអាចបង្កើតអថេរនៃ

ប្រភេទម៉ោងTime ហើយ fields នៃប្រភេទម៉ោងTime និង parameters នៃប្រភេទម៉ោង Time ត្រូវបានបង្ហាញដូចក្នុងឧទាហរណ៍នេះ:

struct Time

{

public Time(int hh, int mm, int ss)

{

hours = hh % 24;

minutes = mm % 60;

seconds = ss % 60;

}

public int Hours()

{

return hours;

}

private int hours, minutes, seconds;

}

ឧទាហរណ៍ ម៉ោងរបស់យើង Time struct ផ្ទុក int fields ដែលហៅ ថា hours, minutes និង seconds ។ កាលណាអ្នកបានប្រកាស declare តំបន់អថេរនៃប្រភេទម៉ោង Time អ្នកអាចប្រកាសច្បាស់លាស់ declaring បីតំបន់អថេរ int ដែលហៅថា now.hours, now.minutes និង now.seconds ដែលទាំងអស់មាននៅលើ stack:

Time now;

មិនមាន objects និង heap memory ត្រូវបានជាប់ទាក់ទង់ដូច

បង្ហាញក្នុងដ្យាក្រាម diagram ខាងក្រោមនេះ:
aស្វែងយល់ពីនិយមន័យ Struct

ការផ្តល់កំណត់តួនាទីច្បាស់លាស់សំរាប់អថេរ struct គឺជាធម្មជាតិ ដែលផ្តល់អោយនៃការផ្តុំនៃការកំណត់តួនាទីសំរាប់គ្រប់ fields ។ កាលណាអ្នក បានប្រកាសអថេរ struct ហើយ fields នៅក្នុងអថេរមិនអាច initialized និង កំណត់តំលៃរបស់វាបាន ។ ឧទាហរណ៍ខាងក្រោមនេះនឹងមិនអាច compile បានព្រោះតំលៃអាច read  now.hours មុនពេលវាត្រូវាបានកំណត់ផ្តល់អោយ:

Time now = new Time(12, 30);
aចំលងអថេរ Structure Variable

Time now = new Time(12, 30);

Time copy = now;
aប្រសិនបើអ្នកផ្តល់ដំលៃច្បាស់លាស់ទៅអោយ struct field ដែល field អាចអានប៉ុន្តែ fields ផ្សេងទៀតនៅសេសសល់មិន uninitialized ។ ឧទាហរណ៍ :

Time now;

Time copy = now; //compile time error: now unassigned

ហៅ  Struct Constructors

វាជាមធ្យោបាយងាយស្រួលដើម្បី initialize ក្នុង fields ទាំងអស់ដែល នៅក្នុងអថេរ struct គឺហៅទៅក្នុង default របស់ struct ។ ដូចជាពន្យល់ ក្នុងជំពូកនេះ default constructor សំរាប់ struct ដែលមានរួចស្រេចនិង តែងតែសំរាប់ធ្វើ initializes ក្នុង struct fields ទាំងអស់ទៅ 0, false ឬ null  ដែលមានបង្ហាញក្នុងឧទាហរណ៍ខាងក្រោមនេះ:

Time now = new Time();

Console.WriteLine(now.hours);//compiles okay, writes out 0

Console.WriteLine(now.minutes);//compiles okay,writes out 0

Console.WriteLine(now.seconds);//compiles okay, writes out 0

The following illustration shows the effect of this example.

កាលណាអ្នកហៅ constructor មួយអ្នកត្រូវតែមានពាក្យគន្លឹះ new ពីមុនមិនអាចប្តូរតំលៃ struct ដែលមានក្នុង stack ។ ពាក្យគន្លឹះ new មាន ភាពខុសគ្នា: សំរាប់ class មួយវាចំណាយ memory ពី heap  ចំណែកឯ struct វាចំណាយ memory ពី stack ។ ប្រសិនបើអ្នកត្រូវបានសរសេរ struct constructor ជាកម្មសិទ្ធិរបស់អ្នក អ្នកអាចប្រើ initialize អថេរ struct ។

ដូចបង្ហាញក្នុងឧទាហរណ៍ជំពូកខាងលើ struct constructor តែងតែជាក់លាក់ initialize គ្រប់ fields របស់វាទាំងអស់ ឧទាហរណ៍:

struct Date

{

public Date(int ccyy, Month mm, int dd)

{

this.year = ccyy – 1900;

this.month = mm;

this.day = dd – 1;

}

private int year;

private Month month;

private int day;

}

ឧទាហរណ៍ខាងក្រោមនេះ initializes ដែលហៅកំណត់ច្បាស់លាស់:

Time now = new Time(12, 30);

Console.WriteLine(now.hours);//compiles okay, writes out 12

Console.WriteLine(now.minutes);//compiles okay, writes out 30

Console.WriteLine(now.seconds);//compiles okay, writes out 0

ខាងក្រោមនេះបង្ហាញប្រតិ្តបត្តិនៃឧទាហរណ៍:

អ្នកអនុញ្ញាតដើម្បីធ្វើ initialize ឬផ្តល់អថេរ struct មួយទៅអថេរ struct ផ្េសងទៀតប៉ុន្តែប្រសិនបើអថេរ struct មានតំលៃដែលផ្តល់អោយ ត្រឹមត្រូវ (ប្រសិនបើ fields ទាំងអស់របស់វាបានកំណត់តំលៃច្បាស់លាស់ ខាងក្រោមនេះជាឧទាហរណ៍ compiles ឥឡូវនេះបានផ្តល់អោយវា ។

Time now = new Time(12,30);

Time copy = now;
aឧទាហរណ៍ខាងក្រោមនេះគឺជា fails ក្នុងពេល compile ពីព្រោះវា

គ្មានកំណត់តំលៃច្បាស់លាស់:

Time now;

Time copy = now; //compile time error:now unassigned

មានមធ្យោបាយពីរយ៉ាងដើម្បីបង្កើតតំលៃក្នុង C# ។ អ្នកអាចប្រើ ការរាប់ enumerations ឬអ្នកអាចប្រើ structs ។ ពីព្រោះវាមានប្រភេទ primitive ដូចជា int ដែលជាតំលៃពិត structs មិនអាចក្លែងបន្លំបាន ។ ឧទាហរណ៍ ពាក្យគន្លឹះ int គឺជាតំលៃពិតច្បាស់លាស់មិនអាចកែប្រែបាន ប្រភេទ struct ដែលហៅថា Int32 ដែលមាននៅក្នុងប្រព័ន្ធ System namespace ម្យ៉ាងទៀតអ្នកអាចសរសេរបានដូចនេះ:

int number = 42;

Or you can write this:

System.Int32 number = 42;

int firstWay = new? System.Int32();

int secondWay = new Int32();//assuming a using System; directive

int thirdWay = new int();

int fourthWay = 0;

នេះវាសមមូលមានន័យថា System.Int32 ផ្ទុក static field ឬ method (ដូចជា Parse) អ្នកអាចអនុញ្ញាតចូលក្នុង field ឬ method ដោយប្រើពាក្យ

គន្លឹះ int ឬដោយប្រើ System.Int32 ។ ឧទាហរណ៍ ខាងក្រោមនេះមាន statements ដែលសមមូលគឺ :

int hour = System.Int32.Parse(Console.ReadLine());

int hour = int.Parse(Console.ReadLine());

តារាងខាងក្រោមនេះគឺគ្រប់ប្រភេទ primitive ទាំងអស់និងមានតំលៃស្មើរគ្នា struct ឬ class ។

ពាក្យគន្លឹះ ប្រភេទសមមូល Class ឬ struct
bool System.Boolean struct
byte System.Byte struct
decimal System.Decimal struct
double System.Double struct
float System.Single struct
int System.Int32 struct
long System.Int64 struct
object System.Object class
sbyte System.SByte struct
short System.Int16 struct
string System.String class
uint System.UInt32 struct
ulong System.UInt64 struct
ushort System.UInt16 struct

ក្នុងលំហាត់ខាងក្រោមនេះអ្នកនឹងបង្កើតនិងប្រើប្រភេទ struct បង្ហាញ ពីកាលបរិច្ឆេទ ។

បង្កើតនិងប្រើប្រភេទ type

1. បើកក្នុង StructsAndEnums project ដែលមានទីតាំងក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 9\StructsAndEnums folder ក្នុង My Documents folder របស់

អ្នក ។

2. ក្នុង Code pane បើក Date.cs source file ។

3. ក្នុង Code pane បន្ថែម struct ដែលហៅថា Date នៅក្នុង StructsAndEnums namespace ។ struct នេះនឹងផ្ទុកបី private fields: មួយហៅថា year នៃប្រភេទ int និងមួយទៀត month នៃប្រភេទ Month (ដូចដែលប្រកាស declare លំហាត់ពីមុនមក) និងមួយទៀតហៅថា day នៃប្រភេទ int ។  Date struct និងមើល ដូចខាងក្រោមនេះ:

namespace StructsAndEnums

{

struct Date

{

private int year;

private Month month;

private int day;

}

}

4. ក្នុង Code pane បន្ថែម public constructor មួយទៅក្នុង Date struct ។ ដែល constructor នេះយកចេញពី parameters បីគឺ: មួយ int ហៅថា ccyy សំរាប់ year មួយទៀត Month ដែលហៅថា mm សំរាប់ month និងមួយទៀត int ហៅថា dd សំរាប់ day ។ ប្រើ parameters ទាំងបីនេះសំរាប់ធ្វើ initialize បានប្រាកដ ។ year field នៃ Y បង្ហាញ year Y + 1900 ដូច្នេះអ្នកនឹងត្រូវការធ្វើ initialize year field ទៅតំលៃ ccyy – 1900 ។  day field នៃ D បង្ហាញ day D + 1, ដូច្នេះអ្នកនឹងត្រូវការដើម្បីធ្វើ initialize day field ទៅអោយតំលៃ dd – 1 ។ Date struct នឹងបង្ហាញដូចខាងក្រោមនេះ:

namespace StructsAndEnums

{

struct Date

{

public Date(int ccyy, Month mm, int dd)

{

year = ccyy – 1900;

month = mm;

day = dd – 1;

}

private int year;

private Month month;

private int day;

}

}

5. ក្នុង Code pane បន្ថែម public method ហៅថា Write ទៅក្នុង Date struct ។ method នេះយកមិនមាន arguments និងមិនត្រឡប់ វិញ ។ វាសរសេរ date ទៅក្នុង console ។ ចាំថា តំលៃនៃ year field បង្ហាញ year + 1900 និងតំលៃ day field បង្ហាញ day + 1 ។ Write method នឹងបង្ហាញដូចខាងក្រោមនេះ:

namespace StructsAndEnums

{

struct Date

{

public void? Write()

{

Console.Write(month);

Console.Write(” “);

Console.Write(day? +? 1);

Console.Write(” “);

Console.Write(year? +? 1900);

}

}

}

6. ក្នុង Code pane បើកប្រភព file Main.cs រួចហើយចូលក្នុងទីតាំង Entrance method ។

7. ក្នុង Code pane បន្ថែម statement មួយទៅក្នុង Entrance ដែល ប្រកាស declare តំបន់អថេរដែលហៅថា defaultDate និង initializes វាទៅក្នុង Date តំលៃដែលបានស្ថាបនារួចដោយប្រើ  defaultDate constructor ។ បន្ថែម statement ផ្សេងទៀតទៅក្នុង Entrance ដើម្បីសរសេរ defaultDate ទៅក្នុង console ដែលហៅ  Write method របស់វា ។​ បន្ថែម statement ផ្សេងទៀតទៅក្នុង Entrance ដើម្បីសរសេរបន្ទាត់ console ថ្មីដែលហៅថា Console.WriteLine ។ Entrance method នឹងឃើញច្បាស់លាស់ ដូចខាងក្រោមនេះ:

 

namespace StructsAndEnums

{

class Application

{

static void Entrance()

{

Date? defaultDate = new Date();

defaultDate.Write();

Console.WriteLine();

}

}

}

8. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ កម្មវិធី Visual Studio .NET builds និងរត់ដំណើរការ ។

9. បញ្ជាក់ថា January ដែលអនុញ្ញាត January 1 1900 ត្រូវបាន

សរសេរទៅ console ។

10. ចុចលើ key ណាមួយត្រឡប់ទៅកម្មវិធី Visual Studio .NET

11. ក្នុង Code pane ត្រឡប់ទៅក្នុងEntrance method ។

12. ក្នុង Code pane បន្ថែមបីឬច្រើនជាង statements ទៅ Entrance method ។ ដែល statement ទីមួយនឹងប្រកាស declare ទីតាំងអថេរដែលហៅថា halloween និង initialize វាទៅ October 31 2003 ។  statement ទីពីរនឹងសរសេរ halloween ទៅ console ដែលហៅថា Write method ។ និង statement ទីបីនឹងសរសេរបន្ទាត់

ថ្មីទៅ console ។ Entrance method នឹងបង្ហាញជាក់ច្បាស់ដូចខាង

ក្រោមនេះ :

namespace StructsAndEnums

{

class Application

{

static void Entrance()

{

Date halloween = new Date(2003,Month.October, 31);

halloween.Write();

Console.WriteLine();

}

}

}

13. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ កម្មវិធី Visual Studio .NET builds និងរត់ដំណើរការ ។

សង្ខេបជំពូកទី ៩

ប្រធានបទ

ការអនុវត្តន៍

ប្រកាស Declare  ប្រភេទ ការរាប់ enumeration  សរសេរពាក្យគន្លឹះ enum  តាមឈ្មោះ   នៃប្រភេទតាមគូរនៃសញ្ញាគ្នាដែល នផ្ទុកសញ្ញាក្បៀស listនៃការ រាប់ enumerationenum Season {Spring, Summer, Fall, Winter }
ប្រកាស Declare អថេរការរាប់ enumeration  សរសេរឈ្មោះនៃប្រភេទការរាប់ enumeration នៅខាងឆ្វេងតាមឈ្មោះនៃអថេរតាមសញ្ញា semicolon ឧទាហរណ៍:

Season

currentSeason;

Initialize ឬផ្តល់ការរាប់ enumeration និង តំលៃអថេរ variable  តែងតែសរសេរឈ្មោះនៃការរាប់ enumeration តួរអក្សព្យញ្ជន: ឈ្មោះនៅក្នុងបន្សំជាមួយឈ្មោះនៃប្រភេទការរាប់ enumeration ដែលជាកម្មសិទ្ធិ ឧទាហរណ៍:

currentSeason = Season; // compile time error

currentSeason = Season.Spring; // okay

currentSeason = Season; // compile time error

currentSeason = Season.Spring; // okay

 

ប្រកាស Declare ប្រភេទ Struct  សរសេរពាក្យគន្លឹះ struct តាមឈ្មោះ នៃប្រភេទ struct តាម body នៃ struct(ដូចជា constructors, methods, និង fields) ឧទាហរណ៍:

struct Time

{

public Time(int hh, int mm, int ss)

{ … }

private int hours, minutes, seconds;

}

ប្រកាស Declare struct និងអថេរ  សរសេរឈ្មោះនៃប្រភេទ struct តាមឈ្មោះនៃអថេរតាមសញ្ញា semicolon ។ ឧទាហរណ៍:Time now;
Initialize ឬផ្តល់អថេរ struct ទៅតំលែ value  Initialize ឬ ផ្តល់អថេរទៅតំលៃ struct ដែលបង្កើតដែលហៅថា struct constructor ។ ឧទាហរណ៍ :Time lunch = new Time(12, 30, 0);

lunch = new Time(12, 30, 0);

មេរៀនទី១១: Array និង Collection

មេរៀនទី១១: Array និង Collection

ក្នុងជំពូកនេះនឹងរៀនអំពីរបៀប:

– ប្រកាស Declare, initialize, copy និងប្រើអថេរ array

-ប្រកាស Declare, initialize, copy និងប្រើប្រភេទអថេរ collection ។

1. អ្វីដែលទៅដែលហៅថា  Array?

array គឺជាធាតុមួយដែលគ្រប់ធាតុទាំងអស់មានក្នុង array គឺជា

ប្រភេទដូចគ្នា (មិនដូច fields ក្នុង struct ឬ class ដែលមានភាពខុសគ្នា) ។ ធាតុនៃ array ដែលមានផ្ទុកក្នុងបណ្តុំនៃ memory និងត្រូវបានអនុញ្ញាតប្រើ ចំនួនគត់ integer (មិនដូច fields ក្នុង struct ឬ class ដែលត្រូវបានអនុញ្ញាត ដោយឈ្មោះ) ។ array គឺមានលក្ខណ:ពិសេសដែលប្រើប្រាស់កាលណា កម្មវិធី ត្រូវការ handle និងរៀបចំ group items ដូចគ្នាក្នុងករណីនេះវាមានភាពរលូន និងថាមពលខ្លាំងខ្លាដែលបង្កើតអថេរដោយផ្ទាល់ខ្លួនឯង ។

ការប្រកាសអថេរ Array

អ្នកប្រើស្តង់ដាប្រភេទឈ្មោះដើម្បីប្រកាស declare array មួយ ។ អ្នក ប្រកាស declare ប្រភេទ array មួយនៅខាងឆ្វេងដោយសរសេរឈ្មោះនៃធាតុ តាមគូរនៃសញ្ញា square brackets ។ សរសេរនៅក្នុងសញ្ញា square brackets ដែលអថេរ គឺជា array ។ ឧទាហរណ៍ ដើម្បីប្រកាស declare array មួយះថេរចំនួនគត់ int ដែលហៅថា pins អ្នកនឹងសរសេរដូចនេះ :

int[] pins; // Personal Identification Numbers

បង្កើត Array Instance

Array គឺជាប្រភេទ reference មិនមានប្រភេទតំលៃ ។ នេះមានន័យថាអថេរ array ទៅតាម array instance នៅលើ heap (ដូចជា អថេរ class តាមប្រភេទ object នៅលើ heap) ។ កាលណាអ្នកប្រកាស declare អថេរ array មួយអ្នកមិនបង្កើត array instance ទៀតទេ ។ កាលណាអ្នកប្រកាស declare អថេរ class មួយអ្នកមិនបង្កើត class instance ទៀតទេ ។ Arrays និង classes គឺជាប្រភេទ reference ។ ដើម្បី បង្កើត array instance អ្នកសរសេរពាក្យ គន្លឹះ new keyword តាមឈ្មោះ នៃប្រភេទ element តាមទំហំរបស់ array អ្នកកំពុងបង្កើតរវាសញ្ញា square brackets ។ ឧទាហរណ៍ ដើម្បីបង្កើត array ថ្មីនៃបួនចំនួនគត់ integers អ្នក សរសេរដូចនេះ:

pins = new int[4];

តាមពិតលទ្ធផល អ្នកប្រើការបង្កើតកន្សោម array បង្កើតងថ្មីភ្លាមៗ ពេលនោះ array instance និងបាត់បង់ ។ ខាងក្រោមនេះជាឧទាហរណ៍:

ខាងក្រោមនេះជា diagram ដែលបង្ហាញពីការប្រើ
a

ទំហំនៃ array instance មួយអាចគណនាក្នុងពេល run time ។ វាមិនត្រូវការ compile-time constant ឧទាហរណ៍ខាងក្រោមនេះបង្ហាញ:

int size = int.Parse(Console.ReadLine());

int[] pins = new int[size];

ចាប់ផ្តើមអថេរ Array

កាលណាអ្នកបង្កើត array instance មួយដែលគ្រប់ធាតុទាំងអស់នៃ array instance ត្រូវបានចាប់ផ្តើមទៅក្នុងតំលៃ default អាស្រ័យទៅលើ

ប្រភេទរបស់វា:

­ ប្រភេទចំនួនបានសង់រួចស្រេច (ដូចជា int) ត្រូវបានចាប់ផ្តើមទៅ 0 ។ ការរាប់ត្រូវបានចាប់ផ្តើមទៅ 0 ផងដែរ ។

­ បណ្តាធាតុ ​bool ត្រូវបានចាប់ផ្តើមទៅ false ។

­ បណ្តាប្រភេទធាតុ ​Reference ត្រូវបានចាប់ផ្តើមទៅ null ។

តំលៃមិនជាទូទៅរវាងគូរនៃសញ្ញាអង្កត់វង់ក្រចក ។ ឧទាហរណ៍ ដើម្បី ចាប់ផ្តើម pins ទៅ array នៃតំលៃ4អថេរចំនួនគត់ int ដែលមានតំលៃគឺ 9, 3, 7 និង 2 អ្នកនឹងសរសេរដូចនេះ:

int[] pins = new int[4]{9, 3, 7, 2 };

តំលៃរវាងសញ្ញាអង្កត់វង់ក្រចកមិនមែនថេរ constants អាចប្រែប្រួល វាអាចមានតំលៃដែលអាចគណនានៅពេល run time ដែលហៅថា methods, ដូចដែលបង្ហាញក្នុងឧទាហរណ៍ខាងក្រោមនេះ:

Random r = new Random();

int[] pins = new int[4]{ r.Next() % 10, r.Next() % 10,

r.Next() % 10, r.Next() % 10 };

ចំនួននៃតំលៃរវាងសញ្ញាអង្កត់វង់ក្រចកត្រូវតែពិតប្រាកដជាក់ច្បាស់ ទំហំនៃ array instance ចាប់ផ្តើមបង្កើត:

int[] pins = new int[3]{ 9, 3, 7, 2 }; // compile time error

int[] pins = new int[4]{ 9, 3, 7 }; // compile time error

int[] pins = new int[4]{ 9, 3, 7, 2 }; // okay

កាលណាអ្នកកំពុងចាប់ផ្តើមអថេរ array មួយអ្នកអាចប្រើ syntax នេះ: សរសេរសញ្ញាក្បៀសតំលៃរវាងសញ្ញាអង្កត់វង់ក្រចក ឧទាហរណ៍ជំនួស សរសេរនេះ:

int[] pins = { 9, 3, 7, 2 };

ទោះបីជាយ៉ាងណាក័ដោយ shortcut នេះគ្រាន់តែធ្វើការសំរាប់ចាប់

ផ្តើម array ។ ប្រសិនបើអ្នកកំពុងតែផ្តល់អថេរ declared array រួចរាល់:

int[] pins = { 9, 3, 7, 2 }; // okay

pins = { 9, 3,? 7,? 2? };//compile? ti

me error

pins = new int[4]{ 9, 3, 7, 2 }; //okay

អ្នកអាចចាប់ផ្តើមទៅ struct នីមួយៗក្នុង array នៃ structs ដែលហៅ struct constructor ដូចដែលបង្ហាញដូចខាងក្រោមនេះ:

int[] pins = { 9, 3, 7, 2 };

អនុញ្ញាតចូលធាតុរបស់ Array

ដើម្បីអនុញ្ញាតចូលធាតុរបស់ array អ្នកសរសេរឈ្មោះនៃអថេរ array បន្ទាប់មកប្រើចំនួនគត់ integer នៃធាតុនោះអ្នកកំពុងតែអនុញ្ញាតចូលរវាង

សញ្ញាគ្នាប square brackets ។  Array គឺគោល zero-based ។ ធាតុចាប់ ផ្តើមនៃ array ដែលមាននៅក្នុង zero ។ ឧទាហរណ៍ខាងក្រោមនេះជា array យោងតាម pins អ្នកនឹងសរសេរដូចនេះ:

int myPin;

myPin = pins[2];

អ្នកអាចប្រើកន្សោមនេះក្នុងពេលអាន read ឬសរសេរ write context. ឧទាហរណ៍:

myPin = 1645;

pins[2] = myPin;

គ្រប់ធាតុ array ទាំងអស់អនុញ្ញាត bounds-checked ។ ប្រសិនបើ អ្នកប្រើចំនួនគត់ integer ដែលតំលៃតូចបំផុតគឺ 0 ឬធំជាងឬស្មើប្រវែងរបស់ array ។ ពេល compiler នឹងបោះចោល IndexOutOfRangeException ដូច ឧទាហរណ៍ខាងក្រោមនេះ:

try

{

int[] pins = { 9, 3, 7, 2 };

Console.WriteLine(pins[4]); // error, the 4th element is at index 3

}

catch (IndexOutOfRangeException ex)

{

}

វើឡើងវិញដោយឆ្លងកាត់ Array

 អ្នកអាចធ្វើសារឡើងវិញដោយឆ្លងកាត់បណ្តាធាតុរបស់ array ដែល

ប្រើ statement ។ code ឧទាហរណ៍ខាងក្រោមនេះសរសេរពីតំលៃធាតុ array ទៅ console:

int[] pins = { 9, 3, 7, 2 };

for (int index = 0; index != pins.Length; index++)

{

int pin = pins[index];

Console.WriteLine(pin);

}

Copy ចំលង Array

Arrays គឺជាប្រភេទ reference ។ អថេរនៃ array មួយមានផ្ទុក reference មួយដើម្បីបង្កើត array instance ។ នេះមានន័យថាកាលណាអ្នក copy អថេរ array មួយអ្នកបញ្ចប់ជាមួយពីរ references ដែលយោងទៅតាម array instance ដូចគ្នាឧទាហរណ៍:

int[] pins = { 9, 3, 7, 2 };

foreach (int pin in pins)

{

Console.WriteLine(pin);

}

ប្រសិនបើអ្នកចង់បង្កើត copy នៃ array instance ដែលអថេរ array មួយយោងទៅតាមវា អ្នកធ្វើពីរបញ្ហា ។ ទីមួយ អ្នកត្រូវការបង្កើត array instance ថ្មីនៃប្រភេទដូចគ្នានិងប្រវែង array​ដូចគ្នាអ្នកកំពុង copy ដូចក្នុង ឧទាហរណ៍នេះ:

int[] pins = { 9, 3, 7, 2 };

int[] alias = pins; // alias and pins refer to the same array instance

ប៉ុន្តែបើអ្នកប្តូរប្រវែងដើមរបស់ array អ្នកត្រូវចាំថាប្តូរទំហំនៃ copy ផង ដែរ វាប្រសើជាងកំណត់ប្រវែងនៃ array មួយដោយប្រើប្រវែងរបស់វា បង្ហាញ

ក្នុងឧទាហរណ៍ខាងក្រោម:

int[] pins = { 9, 3, 7, 2 };

int[] copy = new int[4];

បណ្តាតំលៃខាងក្នុង copy ឥឡូវនេះបានចាប់ផ្តើមទាំងអស់ទៅក្នុង តំលៃ default នៃ 0 ។ បញ្ហាទីពីរអ្នកត្រូវការធ្វើគឺបង្កើតតំលៃខាងក្នុង array ថ្មី ទៅតំលៃដូចគ្នាក្នុង array ដើម ។ អ្នកនឹងអាចធ្វើដូចនេះដោយប្រើ statement, ដូចបង្ហាញក្នុងឧទាហរណ៍ខាងក្រោមនេះ:

int[] pins = { 9, 3, 7, 2 };

int[] copy = new int[pins.Length];

for (int i = 0; i != copy.Length; i++)

{

copy[i] = pins[i];

}

ដើម្បីចង្អុលបង្ហាញពីគោលការណ៍នេះនិងពិចារណាពីការប្រតិ្តបត្តិបង្កើត  creating និង copying ចំលង array មួយដែលប្រភេទធាតុគឺជារបស់វាខ្លួនឯង ប្រភេទ reference ។ ឧទាហរណ៍ខាងក្រោមនេះបង្កើត array មួយនៃ 4 triangles:

Triangle[] triangles = new Triangle[4];

ប្រសិនបើ Triangle គឺជា class មួយដែលតួនាតី array instance ចាប់ផ្តើមក្នុងធាតុនីមួយៗគឺត្រូវបានចាប់ផ្តើមទៅ null ។ ម្យ៉ាងទៀត diagram statement ពីមុនមើលឃើញដូចនេះ ។
aឧបមាថាអ្នកបំពេញ triangles array ជាមួយ 4 Triangle objects ថ្មី ដែលមានដូចនេះ:

Triangle[] triangles = new Triangle[4];

for (int i = 0; i != triangles.Length; i++)

{

triangles[i] = new Triangle();

}

diagram នៃឧទាហរណ៍មានដូចខាងក្រោមនេះ:
aចុងក្រោយ ឧបមាថាអ្នកឥឡូវនេះបង្កើត copy មួយនៃ triangles array ដូចជា:

Triangle[] copy = new Triangle[triangles.Length];

for (int i = 0; i != copy.Length; i++)

{

copy[i] = triangles[i];

}

diagram នៃឧទាហរណ៍មានដូចខាងក្រោមនេះ:
a

ប្រើ System.Array Class

ហេតុអ្វីបានជាប្រភេទ int គឺជាប្រភេទតំលៃ; គ្រប់ structs ទាំងអស់គឺ ជាប្រភេទតំលៃ ។ ឧទាហរណ៍:

string rep = 42.ToString();

System.Array class ផ្គត់ផ្គង់ប្រវែងគ្រប់ arrays ទាំងអស់ ។ ម្យ៉ាងទៀត មិនមានភាពខុសគ្នារវាងពីរ statements:

int[] pips = new int[4]{ 9, 3, 7, 2 };

Array pips = new int[4]{ 9, 3, 7, 2 };

ទោះបីអ្នកបានឃើញ Array class ក្នុង code ។ ក្នុងគោលបំណង នាំប្រភេទ array ទាំងអស់ទៅក្នុងភាសារួមមួយ common language runtime (CLR) ។ ការចាប់ផ្តើមប្រើប្រាស់ shortcut មិនអាចធ្វើបានកាលណា ចាប់ផ្តើមអថេរ array មួយ :

int[] pips = { 9, 3, 7, 2};//okay

Array pips = { 9, 7, 3, 2};//compile time error

ឧទាហរណ៍កាលណាសរសេរ statement មួយទៅក្នុងធាតុ copy ក្នុង array មួយទៅ array ផ្សេងទៀត ។ អ្នកអាចប្រើ System.Array instance method ដែលហៅថា CopyTo ដែល copy ចំលងមាតិកានៃ array មួយទៅ

ក្នុង array ផ្សេងទៀត:

int[]pins = { 9, 3, 7, 2 };

int[]copy = new int[pins.Length];

pins.CopyTo(copy, 0);

មធ្យោបាយផ្សេងទៀតដើម្បី copy តំលៃទៅប្រើក្នុង System.Array static method ដែលហៅថា Copy ។ ដូចជាមួយ CopyTo  កំណត់ array ជាមុនពេលចាប់ផ្តើម Copy បង្កើត:

int[] pins = { 9, 3, 7, 2 };

int[] copy = new int[pins.Length];

Array.Copy(pins, copy, copy.Length);

ម្យ៉ាងទៀតដើម្បីផ្លាស់ប្តូរ System.Array instance method ហៅថា Clone ដែលអាចប្រើសំរាប់បង្កើត array ទាំងមូលនិង copy វាដើម្បីធ្វើ

សកម្មភាព:

int[] pins = { 9, 3, 7, 2 };

int[] copy = (int[])pins.Clone();

2. អ្វីទៅដែលហៅថា Collection Classes?

Arrays គឺជាមធ្យោយបាយតែមួយគត់ដើម្បីប្រមូលធាតុនៃប្រភេទដូចគ្នា ក្នុងកម្មធី Microsoft .NET Framework មាន namespace ដែលហៅថា System.Collections ដែលផ្ទុកច្រើនរាប់មិនអស់ classes ដែលមានមុខងារ សំរាប់ប្រមូលធាតុរួមទាំងអស់ ។ បណ្តា class ទាំងនេះផ្គត់ផ្គង់បង្កើតដំណោះ

ស្រាយរួចជាស្រេចគ្រប់ស្ថានភាព កាលណាអ្នកត្រូវការប្រមូលផ្តុំធាតុ ។

គ្រប់ collection classes ទាំងអស់អនុញ្ញាត  ដាក់និងត្រឡប់ចូល

ទៅក្នុងធាតុ របស់គេដូចជា object ។ ប្រភេទធាតុនេះគឺជាការប្រមូលផ្តុំនៃ class ដែល តែងតែមាន object (System.Object) ។
aអ្នកអាចបន្ថែមតំលៃចំនួនគត់ integer ទៅក្នុង array នេះ (តាមពិត អ្នកអាចបន្ថែមតំលៃនៃប្រភេទទៅអោយវា) ។ កាលណាអ្នកបន្ថែមចំនួនគត់មួយ វា automatically មាននៅក្នុងប្រអប់និងធាតុ array (object reference) យោងតាមប្រអប់ copy ដែលមានតំលៃចំនួនគត់ integer (សំរាប់សំណល់

សេសសស់ក្នុងប្រអប់) ។ ខាងក្រោមនេះគឺបង្ហាញពី diagram ។
a

បញ្ជី ArrayList

ArrayList គឺជាជំនួយ class សំរាប់ធាតុដែលនៅក្នុង array ។ អ្នកអាចធ្វើការគត់ចំណាំថាកាលណាកាត់បន្ថយ array:

¡ ប្រសិនបើអ្នកចង់ resize ទំហំ array ឡើងវិញអ្នកបង្កើត array ថ្មី រួច copy បណ្តាធាតុ (array ថ្មីគឺមានទំហំតូចជាង) រួចហើយ update array references ។

¡ ប្រសិនបើអ្នកចង់ប្តូរ remove ធាតុមួយពី array អ្នកបង្កើត copy មួយនៃធាតុរួចហើយបញ្ចូលទាំងអស់ទៅកន្លែងមួយ ។

¡ ប្រសិនបើអ្នកចង់បានបញ្ចូលធាតុមួយទៅក្នុង array អ្នកបញ្ចូលធាតុ

ទៅខាងក្រោមកន្លែងមួយដើម្បីបង្កើត free slot ។

¡ អ្នកអាច remove ធាតុមូយពី ArrayList ដោយប្រើ Remove method ។

¡ អ្នកអាចបន្ថែមធាតុមួយចុងបញ្ចប់នៃ ArrayList ដោយប្រើវា Add method ។ អ្នកគ្រាន់តែអនុវត្តធាតុដែលបានបន្ថែម ។ ArrayList ដឹងថាវាជា ប្រវែងកម្មសិទ្ធិនិង resize ទំហំដោយខ្លួនវាផ្ទាល់ប្រសិនបើចាំបាច់ ។

¡ អ្នកអាចបញ្ចូលធាតុទៅក្នុងពាក់កណ្តាលនៃ ArrayList ដោយប្រើ Insert method ។  ArrayList នឹង resize ទំហំរបស់វាឡើងវិញ ប្រសិនបើ ចាំបាច់ ឧទាហរណ៍ខាងក្រោមបង្ហាញពីរបៀបប្រើ ArrayList ដើម្បីសរសេរ ចំនួន 10 ឆ្លងទៅ 1 ទៅក្នុងសន្លឹក console:

using System;

using System.Collections;

ArrayList numbers = new ArrayList();

// fill the ArrayList

foreach (int number in new int[12]{10,9,8,7,7,6,5,10,4,3,2,1})

{

numbers.Add(number);

}

// remove first element whose value is 7 (the 4th element, index 3)

numbers.Remove(7);

// remove the element that’s now the 7th element, index 6 (10)

numbers.RemoveAt(6);

// iterate remaining 10 elements using a for statement

for (int i = 0; i != numbers.Count; i++)

{

int number = (int)numbers[i]; // Notice the cast

Console.WriteLine(number);

}

// iterate remaining 10 using a foreach statement

foreach (int number in numbers) // No cast needed

{

Console.WriteLine(number);

}

លទ្ធផលនៃកម្មវិធីនេះ

10

9

8

7

6

5

4

3

2

1

10

9

8

7

6

5

4

3

2

1

Queue

Queue class អនុវត្តក្នុងការប្រមូលផ្តុំ classic first-in first-out (FIFO) ។ ធាតុចូលរួម queue នៅពីក្រោយ (Enqueue) រួចហើយចាក

ចេញពី queue នៅពីមុខ (Dequeue) ។ ដូចជាមួយ ArrayList អ្នកត្រូវបាន បំពេញត្រួតពិនិត្យកន្លែងធាតុនៅខាងក្នុង Queue ។

ទីនេះជាឧទាហរណ៍នៃ queue ធ្វើប្រតិ្តបត្តិការណ៍:

using System;

using System.Collections;

Queue numbers = new Queue();

// fill the queue

foreach (int number in new int[4]{9, 3, 7, 2})

{

numbers.Enqueue(number);

Console.WriteLine(number + ” has joined the queue”);

}

// iterate through the queue

foreach (int number in numbers)

{

Console.WriteLine(number);

}

// empty the queue

while (numbers.Count != 0)

{

int number = (int)numbers.Dequeue();

Console.WriteLine(number + ” has left the queue”);

}

លទ្ធផលរបស់កម្មវិធីនេះ:

9 has joined the queue

3 has joined the queue

7 has joined the queue

2 has joined the queue

9

3

7

2

9 has left the queue

3 has left the queue

7 has left the queue

2 has left the queue

Stack Class

Stack class អនុវត្តក្នុងការប្រមូលផ្តុំ last-in first-out (LIFO) ។ ធាតុចូលរួម stack នៅខាងលើ top (Push) និងចាកចេញ stack នៅលើ top (Pop) ។

using System;

using System.Collections;

Stack numbers = new Stack();

// fill the stack

foreach (int number in new int[4]{9, 3, 7, 2})

{

numbers.Push(number);

Console.WriteLine(number + ” has been pushed on the stack”);

}

// iterate through the stack

foreach (int number in numbers)

{

Console.WriteLine(number);

}

// empty the stack

while (numbers.Count != 0)

{

int number = (int)numbers.Pop();

Console.WriteLine(number + “has been popped off the stack”);

}

លទ្ធផលរបស់កម្មវិធីនេះ:

9 has been pushed on the stack

3 has been pushed on the stack

7 has been pushed on the stack

2 has been pushed on the stack

2

7

3

9

2 has been popped off the stack

7 has been popped off the stack

3 has been popped off the stack

9 has been popped off the stack

Hashtable Class

using System;

using System.Collections;

Hashtable ages = new Hashtable();

// fill the SortedList

ages[“John”] = 41;

ages[“Diana”] = 42;

ages[“James”] = 13;

ages[“Francesca”] = 11;

// iterate using a foreach statement

// the iterator generates a DictionaryEntry object containing a key/value

pair

foreach (DictionaryEntry element in ages)

{

string name = (string)element.Key;

int age = (int)element.Value;

Console.WriteLine(“Name: {0}, Age: {1}”, name, age);

}

 លទ្ធផលរបស់កម្មវិធីនេះ:

Name: James, Age: 13

Name: John, Age: 41

Name: Francesca, Age: 11

Name: Diana, Age: 42

The SortedList Class

SortedList

array និងប្រភេទ ArrayList ជាមធ្យោបាយផ្តល់ទៅអោយទីតាំងនៃ ចំនួនគត់ integer index ទៅក្នុងធាតុ អ្នកផ្គត់ផ្គង់ចំនួនគត់ integer នៅក្នុង សញ្ញាគ្នាប square brackets (ឧទាហរណ៍ [4]) ក្នុងភាសាផ្សេងទៀតតែងតែ

ប្រមូលផ្តុំ array ។ SortedList class ផ្គត់ផ្គង់មុខងារដោយរក្សាទុកពីរ object arrays មួយសំរាប់ keys ដែលអ្នកកំពុងមើលពីមួយសំរាប់តំលៃដែលអ្នកកំពុង

បង្ហាញ។ keys array គឺជាមធ្យោបាយចែកចេញ (ដែលហៅថា SortedList)។

កាលណាអ្នកបញ្ចូលគូរ key/value ទៅក្នុង SortedList មួយ key ត្រូវបានបញ្ចូលទៅក្នុង keys array ក្នុងពេលកែតំរូវ index ដើម្បីរក្សាទុក keys array ។ តំលៃដែលបានបញ្ចូលក្នុងតំលៃ array នៅពេល index ដូចគ្នា  នេះមានន័យថាអ្នកអាចបញ្ចូល key/value ទៅក្នុង SortedList ។ មានសារ:សំខាន់សំរាប់ design:

¡ ភាពខុសគ្នាទៅ collection class ផ្សេងទៀត អ្នកមិនអាចត្រួត ពិនិត្យកន្លែងធាតុស្ថិតនៅក្នុង SortedList មួយ ។

¡ SortedList មិនអាចផ្ទុក duplicate key ។ ប្រសិនបើអ្នកហៅ Add method បន្ថែម key មួយដែលបង្ហាញរួចស្រេចក្នុង key array អ្នកនឹង ទទួលបាន exception មួយ ។ ទោះបីជាអ្នកប្រើសញ្ញាគ្នាប square

bracket កំណត់បន្ថែម key/value (មើលក្នុងឧទាហរណ៍ខាងក្រោម)។

¡ កាលណាអ្នកប្រើសំរាប់ statement នីមួយៗដើម្បីធ្វើឡើងវិញដោយ

ឆ្លងកាត់ SortedList អ្នកទទួលក្រោយពី DictionaryEntry ។

នេះជាឧទាហរណ៍មានសារ:សំខាន់:

using System;

using System.Collections;

SortedList ages = new SortedList();

// fill the SortedList

ages[“John”] = 39;

ages[“Diana”] = 40;

ages[“James”] = 12;

ages[“Francesca”] = 10;

// iterate using a foreach statement

// the iterator generates a DictionaryEntry object containing a key/value

pair

foreach (DictionaryEntry element in ages)

{

string name = (string)element.Key;

int age = (int)element.Value;

Console.WriteLine(“Name: {0}, Age: {1}”, name, age);

}

លទ្ធផលកម្មវិធីនេះគឺ:

Name: Diana, Age: 40

Name: Francesca, Age: 10

Name: James, Age: 12

Name: John, Age: 39

ប្រើ Collection Class ទៅ Play Card

មាន 52 cards ក្នុងប្រអប់ នេះគឺពិតប៉ុន្តែវាមើលមិនឃើញ card នឹងមិននៅក្នុងហ៊ូពីព្រោះវានឹងត្រូវបានចែក ប្រសិនបើអ្នកប្រើ array មួយ អ្នកនឹង record មាន array ប៉ុន្មានពិតនៅក្នុង PlayingCard ។ អ្នកនឹងសិក្សា code រួចសរសេរពីរ method: ទីមួយសាប់ប៊ៀក្នុងហ៊ូនិងមួយទៀត ដកប៊ៀ ពីក្នុងដៃទៅក្នុងហ៊ូ ។

ចែកប៊ៀ Deal the card

1. ចាប់ផ្តើមចូលក្នុង Microsoft Visual Studio .NET

2. បើក Aggregates project ទីតាំងក្នុង \MicrosoftPress\Visual C# Step by Step\Chapter 10\Aggregates folder ក្នុង My Documents folder របស់អ្នក ។ ពេលនោះ Aggregates project បានបើកឡើង ។

3. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ Visual Studio .NET builds និងរត់ដំណើរការកម្មវិធី ។ Windows form មើលឃើញសន្លឹកប៊ៀក្នុងដៃនៃអ្នកលេងទាំងបួន (ជើង, ត្បូង, កើត, និងលិច) ។ មានពីរប៊ូតុង: មួយសំរាប់ចែកប៊ៀនិងមួយទៀតបក

ត្រឡប់ពីក្នុងហ៊ូ ។

4. ចុចលើ Deal នៅលើសន្លឹក Windows form ។ ប៊ៀ 52 សន្លឹកនៅ ក្នុងហ៊ូត្រូវបានចែកទៅក្នុងដៃអ្នកលេងទាំងបួនគឺ 13 សន្លឹកក្នុងដៃ

នីមួយៗ ។

មេរៀនទី១២: ប៉ារ៉ាម៉្រែត Array

មេរៀនទី១២: ប៉ារ៉ាម៉្រែត Array

1. បង្កើត Overloaded Method

Overload គឺជាបច្ចេកទេសសំរាប់ប្រកាស declare ពីរឬ ច្រើន methods ជាមួយឈ្មោះដូចគ្នានៅក្នុង scope ដូចគ្នា ។ ចាប់ផ្តើមអាចធ្វើ overload method គឺប្រើក្នុងករណីកន្លែងដែលអ្នកចង់ចាត់ចែង សកម្មភាព នៅលើ arguments នៃប្រភេទខុសគ្នា ។ ឧទាហរណ៍ overload ក្នុងកម្មវិធី Microsoft Visual C# is Console.WriteLine ។ WriteLine method គឺជា overloaded ប្រើរយះពេលដ៏ធំដែលអ្នកអាចផ្ញើទៅក្នុងប្រភេទ primitive argument:

class Console

{

public static void WriteLine(int parameter)

public static void WriteLine(double parameter)

public static void WriteLine(decimal parameter)

}

2. ប្រើប្រាស់ Array Argument គឺជាមធ្យោបាយអ្នកនឹងអាចរកឃើញអប្បរិមានៃ តំលៃចំនួនអថេរ នឹងប្រើ ទៅក្នុង array មួយ ។ ឧទាហរណ៍ ដើម្បីរកតំលៃតូចបំផុតនៃ int អ្នកនឹងអាចសរសេរ static method ដែលហៅថា Min ដែល parameter ទោលដែលគឺជា តំលៃ array នៃ int:

class Util

{

public static int Min(int[] paramList)

{

if (paramList == null || paramList.Length == 0)

{

throw new ArgumentException(“Util.Min”);

}

int currentMin = paramList [0];

foreach (int i in paramList)

{

if (i < currentMin)

{

currentMin = i;

}

}

return currentMin;

}

}

ដើម្បីប្រើ Min method សំរាប់រកមើលតំលៃអប្បរិមាពីរនៃ int អ្នកនឹង សរសេរដូចនេះ:

int[] array = new int[2];

array[0] = first;

array[1] = second;

int min = Util.Min(array);

ដើម្បីប្រើ Min method សំរាប់រកតំលៃអប្បរិមានៃ បីចំនួន int អ្នកនឹង សរសេរដូចនេះ:

int[] array = new int[3];

array[0] = first;

array[1] = second;

array[2] = third;

int min = Util.Min(array);

ប្រកាស params Array

អ្នកអាចប្រើពាក្យគន្លឹះ params ដូចជា array parameter មួយដែល ផ្លាស់ប្តូរ ឧទាហរណ៍ Min ពេលនេះប្រើជាមួយ array parameter ដែល

ប្រកាស declared ដូចជា params array:

class Util

{

public static int Min(params int[] paramList)

{

// code exactly as before

}

}

លទ្ធផលនៃពាក្យគន្លឹះ params នៅលើ Min method គឺវាអនុញ្ញាត អោយអ្នកហៅវាដោយប្រើចំនួនគត់ integer arguments ។ ឧទាហរណ៍ រក តំលៃអប្បបរិមានៃពីរចំនួនគត់ integer អ្នកនឹងអាចសរសេរដូចនេះ:

int min = Util.Min(first, second);

និង compiler បកប្រែហៅទៅក្នុង code ខាងក្រោមនេះ:

int[] array = new int[2];

array[0] = first;

array[1] = second;

int min = Util.Min(array);

ដើម្បីរកតំលៃអប្បបរិមានៃបីតំលៃចំនួនគត់ អ្នកនឹងសរសេរដូចនេះ:

int min = Util.Min(first,second,third);

រួចហើយ compiler បកប្រែហៅទៅក្នុង code ខាងក្រោមនេះ:

int[] array = new int[3];

array[0] = first;

array[1] = second;

array[2] = third;

int min = Util.Min(array);

មានចំណុចជាច្រើនដែលមិនល្អអំពី params arrays:

 

· អ្នកអាចប្រើពាក្សគន្លឹះគ្រាន់តែជា single-dimension arrays​ ដូចឧទាហរណ៍នេះ:

// compile-time error

public static int Min(params int[,] table)

­ អ្នកមិនអាច overload មូលដ្ឋាននៅលើពាក្យគន្លឹះ params ។ ពាក្យ គន្លឹះ params មិនមាន form នៃ method ដូចបង្ហាញក្នុងឧទាហរណ៍ក្រោមនេះ

// compile-time error: duplicate declaration

public static int Min(int[] paramList)

public static int Min(params int[] paramList)

­ អ្នកមិនអនុញ្ញាត ref ឬ out params arrays ដូចបង្ហាញឧទាហរណ៍ ខាងក្រោមនេះ:

// compile-time errors

public static int Min(ref params int[] paramList)

public static int Min(out params int[] paramList)

­ params array មួយត្រូវតែ parameter ពីមុន (នេះមានន័យថាអាច មាន params array ក្នុង method) ឧទាហរណ៍ខាងក្រោមនេះ:

// compile-time error

public static int Min(params int[] array,int i)

­ compiler រាវរក rejects និងអនុភាពមិនច្បាស់លាស់នៃ overloads ។ ឧទាហរណ៍ ខាងក្រោមនេះមានពីរ Min methods មិនច្បាស់

លាស់; វាមិនច្បាស់លាស់ដែលមិនហៅផ្ញើទៅពីរ int arguments:

// compile-time error

public static int Min(params int[] paramList)

public static int Min(int, params int[] paramList)

­ មិនមាន non-params method ដែលតែងតែមានអទិភាពលើ params method ។ នេះមានន័យថាប្រសិនបើអ្នកចង់ធ្វើ អ្នកអាចនៅតែ overload សំរាប់ករណីរួមឧទាហរណ៍:

public static int Min(int leftHandSide, int rightHandSide)

public static int Min(params int[] paramList)

3. Console.WriteLine

Console class ដែលផ្ទុកនៅលើ overloads ច្រើនសំរាប់ WriteLine method មួយនៃ overloads ទាំងនេះមើលឃើញដូចខាងក្រោមនេះ:

public static void WriteLine(string format, params object[] arg);

ឧទាហរណ៍ នៃការហៅ method:

Console.WriteLine(“Name:{0}, Age:{1}”, name, age);

compiler ដោះស្រាយហៅនៅក្នុងដូចខាងក្រោមនេះ:

Console.WriteLine(“Name:{0}, Age:{1}”, new object[2]{name, age});

ប្រើ params Array

ក្នុងលំហាត់បន្ទាប់នេះ អ្នកនឹងធ្វើការជាមួយ console application រួចហើយសរសេរ static method ដែលហៅថា Util.Min ដែលមានគោល

បំណងគឺដើម្បីរកនិងត្រឡប់ទៅក្នុងអថេរចំនួនអប្បបរិមានៃ int arguments ដែលផ្ញើទៅវា ។ អ្នកនឹងធ្វើដោយសរសេរ Util.Min ជាមួយ params int[] parameter ។ អ្នកនឹងអនុវត្តពីរលក្ខខ័ណ្ឌឆែកនៅលើ param parameter ដើម្បីធ្វើអោយប្រាកដ Util.Min method ត្រូវបំពេញបញ្ចប់ ។ ចុងក្រោយបំផុត អ្នកនឹងហៅ Util.Min method ជាមួយការផ្ទៀងផ្ទាត់រវាង argument ដើម្បី បញ្ជាក់ធ្វើជាទូទៅ ។

សរសេរ params array method

1. ចាប់ផ្តើមចូលក្នុង Start Visual Studio .NET ។

2. បើក ParamsArrays project ដែលមានទីតាំងក្នុង\Microsoft Press\Visual C# Step by Step\Chapter 11\ ParamsArrays folder នៅក្នុង My Documents folder របស់អ្នក ។

3. បើកប្រភព file Open the Util.cs នៅក្នុង Code pane នៃសន្លឹក Code And Text Editor ។ ក្នុង Util.cs file ផ្ទុក class ទទេដែល ហៅថា Util នៅក្នុង ParamsArrays namespace ។

4. នៅក្នុង Code pane បន្ថែម public static method ដែលហៅថា Min ទៅ Util class ។ ដែល Util.Min method ត្រឡប់ទៅ int និង អនុញ្ញាត params array នៃតំលៃ int ។ Util.Min និងបង្ហាញដូចនេះ:

class Util

{

public static int Sum(params int[] paramList)

{

}

}

4. ជំហានដំបូងក្នុងការអនុវត្តន៍ Util.Min គឺឆែកមើល array parameter ។ វាគឺជា null ហើយនិងជា array មួយដែលមានប្រវែង zero length ។

5. ក្នុង Code pane បន្ថែម statement មួយទៅអោយ Util.Min ដែល បោះចោល ArgumentException ប្រសិនបើ array គឺជា null ។ Util.Min នឹងបង្ហាញដូចខាងក្រោមនេះ:

public static int Sum(params int[] paramList)

{

if (paramList == null)

{

throw new ArgumentException(“Util.Sum: null parameter list”);

}

}

6. ក្នុង Code pane បន្ថែម statement មួយទៅ Util.Min ដែល បោះ

ចោល ArgumentException ប្រសិនបើប្រវែងនៃ array គឺជា 0 ។ Util.Min នឹងបង្ហាញដូចនេះ:

public static int Sum(params int[] paramList)

{

if (paramList == null)

{

throw new ArgumentException(“Util.Sum: null parameter list”);

}

if (paramList.Length == 0)

{

throw new ArgumentException(“Util.Sum: empty parameter list”);

}

}

7. ក្នុង Code pane បន្ថែម statement នីមួយៗទៅ Util.Min ដើម្បីរក មើលធាតុ int ដែលតូចបំផុតនៅក្នុង array រួចហើយត្រឡប់វាពីក្នុង Util.Min ត្រឡប់ statement ។ Util.Min នឹងបង្ហាញដូចខាងក្រោមនេះ:

{

int sumTotal = 0;

foreach (int i in paramList)

{

sumTotal += i;

}

return sumTotal;

}

}

 

8. ក្នុង Code pane បន្ថែម public static ផ្សេងទៀតដែលហៅថា Min ទៅអោយ Util class ។ វិធី method នេះនឹងត្រឡប់ទៅក្នុង int ហើយ អនុញ្ញាតពីរ int parameters ។ ការអនុវត្តន៍ Util.Min ជាមួយ return statement ទោលដែលប្រើប្រមាណវិធីស្ទួនហើយប្រមាណវិធី ។

The new Util.Min នឹងមើលឃើញដូច្នេះ:

Console.WriteLine(Util.Sum(null));

Exception: Util.Min: null parameter list

Console.WriteLine(Util.Sum());

Exception: Util.Min: empty parameter list

Console.WriteLine(Util.Sum(10,9,8,7,6,5,4,3,2,1));

9. នៅក្នុង Code pane ប្តូរ if statement នៅក្នុង statement នីមួយៗក្នុង Util.Min method ដើម្បីហៅ Util.Min method ថ្មី ។

Util.Min ដើមនឹងមើលដូចខាងក្រោមនេះ:

class Util

{

public static int Min(params int[] array)

{

if (array == null)

{

throw new ArgumentException(“Util.Min: null array”);

}

if (array.Length == 0)

{

throw new ArgumentException(“Util.Min:empty array”);

}

int currentMin =array[0];

foreach (int i in array)

{

currentMin = Min(currentMin, i);

}

return currentMin;

}

}

10. នៅលើ Build menu ចុចលើ BuildSolution ។ បញ្ជាក់ថាមិនមាន​ errors ក្នុង code របស់អ្នក ។

ហៅ params array method

1. ក្នុង Code pane បើកប្រភព Program.cs ។

2. ក្នុង Code pane ទីតាំង Entrance method ក្នុង Program class.

3. ក្នុង Code pane បន្ថែម statement ខាងក្រោមទៅ Entrance method:

Console.WriteLine(Util.Min(null));

4. នៅលើ Debug menu ចុចលើ Start Without Debugging ឬប្រើ shortcut key Ctrl+F5 ។ កម្មវិធី builds និងរត់ដំណើរការដែល សរសេរ message ទៅអោយ console ដូចខាងក្រោមនេះ:

Exception: Util.Min: null array

5. នៅក្នុង Code pane ប្តូរហៅទៅ Console.WriteLine ក្នុង Entrance បន្ទាប់មក statement:

Console.WriteLine(Util.Min());

6. នៅលើ Debug menu ចុចលើ Start Without Debugging ឬប្រើ shortcut key Ctrl+F5 ។ កម្មវិធី builds រួចរត់ដំណើរការដែល សរសេរ message ទៅ console​ ដូចខាងក្រោមនេះ:

Exception: Util.Min: empty array

នេះបញ្ជាក់ថាហៅវិធី params method ដោយមិមាន arguments លទ្ធផលប្រវែង array ០ និង មិនមាន null ទីពីរលក្ខខ័ណ្ឌឆែកមើល ក្នុង Util.Min គឺជាការចាំបាច់ ។

7. ប្តូរហៅ Console.WriteLine នៅក្នុង Entrance ដូចខាង

ក្រោមនេះ:

Console.WriteLine(Util.Min(10,9,8,7,6,5,4,3,2,1));

8. នៅលើ Debug menu ចុចលើ Start Without Debugging ឬប្រើ shortcut key Ctrl+F5 ។

9. កម្មវីធី builds, runs រួចហើយសរសេរ 1 ទៅ console ។

សង្ខេបជំពូកទី ១១

ប្រធានបទ

ការអនុវត្តន៍

សរសេរ method ដែលអាច អនុញ្ញាតចំនួននៃប្រភេទបានផ្តល់អោយ ។

 

សរសេរ method មួយដែលមាន parameter គឺជា paramsarray នៃប្រភេទដែលបាន

ផ្តល់អោយ ។ ឧទាហរណ៍ method

ដែលអនុញ្ញាតចំនួននៃ bool arguments នឹងមាន:

someType Method(params bool[] flags)

{

}

សរសេរ method ដែលអាច មានចំនួននៃ arguments នៃប្រភេទផ្សេងទៀត ។  សរសេរ method មួយដែល params array នៃ object មួយ ឧទាហរណ៍:someType Method(params object[] paramList)

{

}

អនុញ្ញាតប្រើ command-line arguments នៅក្នុង Main  សរសេរ Main ដើម្បីអនុញ្ញាតចូល array នៃ strings ។ (ពាក្យគន្លឹះparams គឺមិនចាំបាច់ក្នុងករណី នេះ) ឧទាហរណ៍:

static void Main(

string[] args)

{

}

មេរៀនទី១៣: ជាមួយ Inheritance

មេរៀនទី១៣: ជាមួយ Inheritance

1. អ្វីដែលហៅថា Inheritance?

Inheritance ក្នុងកម្មវិធី programming គឺជាការចាត់ជាថ្នាក់ទាំងអស់; វាទាក់ទងរវាង classes ។ ឧទាហរណ៍ កាលណាអ្នកនៅសាលារៀន អ្នកមាន លទ្ធភាពបានរៀនអំពីវិទ្យាសាស្រ្តថនិកសត្វ ។ ក្នុង Microsoft Visual C# អ្នក

មាន model នេះដោយបង្កើតពីរ classes មួយដែលហៅថាថនិកសត្វនិងមួយ ទៀតដែលហៅថា horse ហើយប្រកាស declare ដែល horse ទទួលពីថនិក សត្វ ។ inheritance នឹងបង្ហាញ model ដែលជាទំនាក់ទំនងហើយនិងចាប់

បានគ្រប់ horses ទាំងអស់គឺជាថនិកសត្វ ។ Inheritance គឺជា class មួយ ដែលទំនាក់ទំនងដូចជាទំនាក់ទំនង object relationship ។ ដែលប្រកាស declare ដែលមានទំនាក់ទំនងរួចជាស្រេចនៅក្នុង class level អ្នកធ្វើអោយ ប្រាកដដែលទំនាក់ទំនងតែងតែផ្តល់គ្រប់ objects ទាំងអស់នៃ class ។

2. ស្វែងយល់ Syntax ក្នុងជំពូកនេះទំនាក់ទំនង inheritance syntax មានសារះសំខាន់ដែល អ្នកត្រូវការដឹងពីរបៀបបង្កើត classes ដែលទទួលពី classes ផ្សេងទៀត ។ អ្នកនឹងរៀនអ្វីដែលមាននៅក្នុង syntax នេះមានន័យថាកាលណាអ្នកបាន ឃើញនៅក្នុងឯកសារ ។ មូលដ្ឋាន Classes និង Classes បានមកពី syntax សំរាប់ប្រកាស declare ដែល class មួយទទួលពី class ផ្សេងទៀតដូច

ខាងក្រោម:

class DerivedClass : BaseClass {

}

អ្នកសរសេរ C++ programmers នឹងកំណត់ចំណាំថាអ្នកមិនអាចធ្វើ ជាក់ស្តែងពីលក្ខណ: inheritance គឺជា public, private ។ ក្នុងកម្មវិធី C# inheritance គឺតែងតែចាត់ចែងច្បាស់លាស់ public ។ អ្នកសរសេរកម្មវិធី Java នឹងកត់ចំណាំថាមិនមានពាពាក្យគន្លឹះ extends ។ System.Object class គឺជា root class សំរាប់ classes ទាំងអស់ ។ ម្យ៉ាងវិញទៀត classes ទាំងអស់កំណត់ច្បាស់លាស់ពី System.Object class ។ ឧបមាថា អ្នក

ប្រកាស declare class មួយដូចនេះ:

class DerivedSubClass : DerivedClass {

}

compiler ស្ងាត់ស្ងៀមសរសេរ Code ឡើងវិញខាងក្រោមនេះ (ដែលអ្នកអាចសរសេរយ៉ាងជាក់ស្តែង ប្រសិនបើអ្នកពិតជាចង់ធ្វើប៉ុន្តែវាមិនល្អ

ប្រសើ):

class Token

{

public Token(string name)

{

}

}

ហៅ Base Class Constructor

class constructor ត្រូវតែហៅវាជាមូលដ្ឋាន class constructor។ អ្នកតែងតែប្រើពាក្សគន្លឹះ base ដើម្បីហៅ base class constructor ។ មានន័យមិនច្បាស់លាស់ក្នុងពេលដែលប្រើពាក្សគន្លឹះ base ពីព្រោះ class មួយអាចមានយ៉ាងតិច base class មួយ ។  ឧទាហរណ៍ទីនេះមាន:

class IdentifierToken : Token

{

}

ប្រសិនបើអ្នកមិនច្បាស់លាស់ហៅ base class មួយនៅក្នុង class constructor ពេល compiler នឹងព្យាយាមហៅ base class នៃ default constructor ។ ឧទាហរណ៍ compiler និងសរសេរឡើងវិញដូចនេះ:

class Token

{

public Token(string name)

{

}

}

​សរសេរ code ឡើងវិញក្លាយដូចនេះ:

class Token : System.Object

{

public Token(string name)

{

}

}

ការធ្វើនេះព្រោះ System.Object មិនមាន public default constructor ។ ទោះបីជាគ្រប់ classes ទាំងអស់មាន public default constructor ក្នុងករណីនេះមិនភ្លេចហៅ base class constructor នឹងមានលទ្ធផលចេញ compile-time error ។ ឧទាហរណ៍:

class IdentifierToken : Token

{

public IdentifierToken(string name)

: base(name) // calls Token(name)

{

}

}

3. ការបង្កើត Interface

ដើម្បីប្រកាស declare interface មួយអ្នកប្រើពាក្យ interface ជំនួស ជំនួសអោយ class ឬពាក្យគន្លឹះ struct ។ នៅខាងក្នុង interface អ្នកប្រកាស declare methods បានពិតប្រាកដ៏ក្នុង class ឬ struct ដែលអ្នកមិនអនុញ្ញាត ផ្លាស់ប្តូរលក្ខណ: (គ្មាន public, private ឬ access) ហើយអ្នកប្តូរ method ជាមួយសញ្ញា semicolon ។ ឧទាហរណ៍:

int CompareTo(object obj)

{

// return 0 if this instance is equal to obj

// return < 0 if this instance is less than obj

// return > 0 if this instance is greater than obj

}

ការអនុវត្តន៍ Interface

ដើម្បីអនុវត្ត interface មួយអ្នកប្រកាស declare class មួយ (ឬ struct មួយ) ដែលទទួលពី interface និងការអនុវត្តន៍គ្រប់ interface ទាំង

អស់នៃ methods ។ ឧទាហរណ៍:

interface IToken

{

string Name();

}

ធ្វើការជាមួយប្រព័ន្ធ inheritance hierarchy

1. ចាប់ផ្តើមចូលក្នុង Microsoft Visual Studio .NET ។

2. បើក CSharp project ដែលមានទីតាំងកក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 12\CSharp folder ដែលមានក្នុង My Documents folder របស់អ្នក ។

3. បើកក្នុងប្រភពដើម SourceFile.cs ក្នុង code pane ។  SourceFile class ផ្ទុក private array field:

interface IToken

{

}

class DefaultTokenImpl

{

}

class IdentifierToken : DefaultTokenImpl , IToken

{

}

ក្នុង SourceFile class ដែលផ្ទុកក្នុង public method ដែលហៅថា Accept ។ វិធី Accept method គឺជាប្រភេទ parameter តែមួយគត់ ItokenVisitor ។ ហៅ Accept methods:

public void Accept(ITokenVisitor visitor)

{

foreach (IVisitableToken token in tokens)

{

token.Accept(visitor);

}

}

4. បើកប្រភព file IVisitableToken.cs នៅក្នុង Code pane ។ IVisitableToken interface ទទួលពី interfaces ពីរផ្សេងទៀតគឺ IVisitable interface និង IToken interface:

interface IVisitableToken : IVisitable, IToken

{

}

5. បើកប្រភព file IVisitable.cs នៅក្នុង Code pane ។ IVisitable interface ប្រកាស declare Accept method ទោលមួយ:

void Process(Itoken iTok)

{

}

ដែល object នីមួយៗនៅក្នុង array យកចេញពីក្នុង SourceFile class ឆ្លងកាត់ IVisitableToken interface ។

6.​បើកក្នុងប្រភព SourceFile.cs ក្នុង Code pane ហើយរកមើលទី តាំង IdentifierToken class ។ ក្នុង IdentifierToken class ទទួល ពី DefaultTokenImpl និង IVisitableToken interface ។ វាអនុវត្ត Accept method ដូចខាងក្រោមនេះ:

void IVisitable.Accept(ITokenVisitor visitor)

{

visitor.VisitIdentifier(ToString());

}

7. បើក ITokenVisitor.cs នៅក្នុង Code pane ។ នៅក្នុង ITokenVisitor interface ផ្ទុក method មួយសំរាប់ប្រភេទនីមួយៗ។ ឧទាហរណ៍:

class MyVisitor : ITokenVisitor

{

public void VisitIdentifier(string token)

{

}

public void VisitKeyword(string token)

{

}

static void Main()

{

SourceFile source = new SourceFile();

MyVisitor visitor = new MyVisitor();

source.Accept(visitor);

}

}

នៅក្នុងលំហាត់ខាងក្រោមនេះ អ្នកនឹងបង្កើត ColorSyntaxVisitor មួយដែលបង្ហាញប្រភព file នៅក្នុងប្រអប់ text color syntax (ឧទាហរណ៍ នៅក្នុងពាក្យគន្លឹះ blue) ។

សរសេរ Color Syntax Visitor class

1.នៅក្នុង Solution Explorer ចុចពីរដង double-click លើ Form1.cs ដើម្បីមើល Color Syntax form ក្នុងសន្លឹក Designer View ។
a

2. បើកក្នុងប្រភព Form1.cs ក្នុង Code pane និងទីតាំងមានពីរ private fields ដែលហៅថា codeText និង Open ដែលបង្ហាញខាង ក្រោមនេះ ។

private System.Windows.Forms.RichTextBox codeText; private System.Windows.Forms.Button Open;

មានពីរ fields ដែលអនុវត្តប្រអប់ text និងប៊ូតុងអ្នកមានទើបតែឃើញ

3. នៅក្នុង Code pane ទីតាំង Form1.Open_Click method ។

method នេះគឺត្រូវបានហៅថាប៊ូតុង Open នៅពេលចុចលើវា ។ អ្នក អនុវត្ត method នេះក្នុងគោល មើលនៅក្នុងប្រអប់ text ។ ប្តូរ Open_Click method ដែលបង្ហាញច្បាស់លាស់ដូចខាងក្រោមនេះ:

private void Open_Click(object sender, System.EventArgs e)

SourceFile source = new SourceFile();

ColorSyntaxVisitor visitor = new ColorSyntaxVisitor(codeText);

source.Accept(visitor);

}

4. បើកប្រភព file ColorSyntaxVisitor.cs នៅក្នុង Code pane ។

5. នៅក្នុង Code pane អនុវត្តសរសេរ method ក្នុង ColorSyntaxVisitor class ដែលបង្ហាញច្បាស់ដូចខាងក្រោមនេះ:

private void Write(string token, Color color)

{

target.AppendText(token);

target.Select(index, index +token.Length);

index += token.Length;

target.SelectionColor = color;

}

6. នៅក្នុង Code pane អនុវត្តវិធីដែលនៅសេសសល់ methods នៃ ColorSyntaxVisitor class ។ ប្រើ Color.Blue សំរាប់ពាក្យគន្លឹះ Color.Green សំរាប់ StringLiterals និង Color.Black សំរាប់វិធីផ្សេង ទៀត:

void ITokenVisitor.VisitComment(string token)

{

Write(token, Color.Black);

}

void ITokenVisitor.VisitIdentifier(string token)

{

Write(token, Color.Black);

}

void ITokenVisitor.VisitKeyword(string token)

{

Write(token, Color.Blue);

}

void ITokenVisitor.VisitOperator(string token)

{

Write(token, Color.Black);

}

void ITokenVisitor.VisitPunctuator(string token)

{

Write(token, Color.Black);

}

void ITokenVisitor.VisitStringLiteral(string token)

{

Write(token, Color.Green);

}

void ITokenVisitor.VisitWhitespace(string token)

{

Write(token, Color.Black);

}

7. នៅលើ Build menu ចុចលើ Build Solution ។ កែតំរូវ errors ផ្សេងនិង rebuild ឡើងវិញប្រសិនបើចាំបាច់ ។

8. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ Color Syntax form បង្ហាញចេញ ។

9. នៅលើ form ចុចលើ Open ។ code ត្រូវបានបង្ហាញក្នុងប្រអប់ text box ជាមួយពាក្យគន្លឹះ blue និង string literals ក្នុង green​ ។
a10. បិទ form អ្នកត្រឡប់ទៅក្នុង Visual Studio .NET ។

ការបង្កើតដ្យាក្រាម Class Diagram
a

ការជាមួយ Multiple Interface

នៅតែអនុវត្តវិធី methods ទាំងអស់ដែលវាទទួលពីក្នុង interfaces ។ abstract class មួយនិង sealed class ទាំងពីរខាងក្រោមនេះមានតួនាទីដូច ជា class មួយ ។ interface មួយគឺមិនអាចអនុញ្ញាតអោយទទួលប្រភេទ class ខុសគ្នា (ដែលនឹងណែនាំការអនុវត្តក្នុង interface) ។

Syntax

ប្រសិនបើ interface, struct ឬ class ទទួលពី interface មួយឬ

ច្រើនជាង interfaces ត្រូវបានសរសេរដោយសញ្ញាក្បៀស ។ ប្រសិនបើ class មួយមានមូលដ្ឋានលើ class មួយទៀត ឧទាហរណ៍:

class IdentifierToken : DefaultTokenImpl, IToken, IVisitable

{

}

ការអនុវត្តន៍ Interface ជាក់ស្តែង

មធ្យោបាយក្នុងការអនុវត្តន៍ struct ឬ class អាចអនុវត្ត interface method ។ នៅក្នុងការឆ្លាស់គ្នា ឈ្មោះវិធី method នេះការអនុវត្តន៍ជាក់ស្តែង មានគុណភាពជាមួយឈ្មោះនៃ interface និងគ្មានការអនុញ្ញាតផ្លាស់ប្តូរ ។ ឧទាហរណ៍ ឧបមាថា IVisitable interface មើលដូចខាងក្រោមនេះ:

interface IVisitable

{

void Accept(IVisitor visitor);

}

អ្នកអាចអនុវត្ត IVisitable interface ដូចនេះ:

public void Accept(ITokenVisitor visitor)

{

foreach (IVisitableToken token in tokens)

{

token.Accept(visitor);

}

}

នេះដែលហៅថាការអនុវត្តន៍ Explicit Interface Implementation (EII) ។ ដែលវិធី EII method ទទួលបានលទ្ធផលដែលបានពីការអនុវត្តន៍ struct ឬ class ។ ឧទាហរណ៍:

IdentifierToken token = new IdentifierToken(“token”);

token.Accept(visitor); //compile-time error: not accessible

ទោះបីជាវិធី method ដែលហៅឆ្លងឈ្មោះ interface ជាក់ស្តែងដែល ប្រើ cast មួយ ឧទាហរណ៍:

IdentifierToken token = new IdentifierToken(“token”);

((IVisitable)token).Accept(visitor); // okay

វិធី EII method ត្រូវបានប្រើយ៉ាងហោចណាស់មានពីរហេតុផល ទីមួយវិធី EII methods បង្កើតព្រឹត្តិការណ៍រវាង interface មួយដែលប្រកាស declares ពីរបៀបប្រើ object មួយ (ប្រភេទមានសារ:ប្រយោជន៍) និង class មួយដែលប្រកាស declare តើត្រូវបង្កើតនិងអនុវត្តបែបណា? ពីព្រោះវិធី EII methods គឺជាលទ្ធផលពី private ទៅ class មធ្យោបាយមួយគត់នេះដែល ហៅមើល object ឆ្លងកាត់ការប្រើ interface ។ ទីពីរ EII method អាច ដោះស្រាយបញ្ហាដោយមាន សក្តានុពលកាលណាឈ្មោះវិធីមួយ method មិន ចុះសំរុងគ្នាមាន interfaces ជាច្រើន ។ ឧទាហរណ៍ សន្មត់ថា IToken និង IVisitable interface ទាំងពីរនេះផ្ទុកក្នុងវិធី method ដែលហៅថា ToString:

interface IToken

{

string ToString();

}

interface IVisitable

{

string ToString();

}

ទោះជាអ្នកចង់ឬមិនចង់ ការអនុវត្តន័ប្រកាស class declares ខាង

ក្រោមនៃ ToString ដែលជាការអនុវត្តន៍នៃវិធីទាំងពីរខាងលើ:

class IdentifierToken : IToken, IVisitable

{

public string ToString()

{

}

}

វិធី EII ផ្តល់់មធ្យោបាយមួយដើម្បីបង្កើតការអនុវត្តន៍ខុសគ្នានៃ ToString ដែលមានមួយក្នុងចំណោមវិធី interface method មួយ ។ ឧទាហរណ៍:

class IdentifierToken : IToken, IVisitable

{

string IToken.ToString()

{

}

string IVisitable.ToString()

{

}

}

សង្ខេបជំពូកទី ១២

ប្រធានបទ

ការអនុវត្តន៍

បង្កើត class ពី base class  ប្រកាស Declare ឈ្មោះ class ថ្មីបន្ទាប់ពី colon និងឈ្មោះនៃ base class ។ ឧទាហរណ៍:class Derived : Base

{

}

ហៅ base class  អនុវត្ត constructor parameter list មុនពេលបង្កើត class constructor. ឧទាហរណ៍:class Derived : Base

{

public Derived(int x) : Base(x)

{

}

}

ប្រកាស Declare virtual method  ប្រើពាក្យគន្លឹះ virtual កាលណា ប្រកាស method ។ ឧទាហរណ៍:class Mammal

{

public virtual void Breathe()

{

}

}

ប្រកាស Declare interface  ប្រើពាក្យគន្លឹះ interface ឧទាហរណ៍:interface IDemo

{

string Name();

string Description();

}

អនុវត្ត interface  ប្រកាស Declare class មួយដែលប្រើ syntax ដូចគ្នាសំរាប់ទទួលដូចជា

Inheritance រួចហើយអនុវត្តគ្រប់មុន ងារទាំងអស់នៃ interface ឧទាហរណ៍

class Test : IDemo

{

public string IDemo.Name()

{

}

public string IDemo.Description()

{

}

}

មេរៀនទី១៤: Properties ក្នុង Attribute

មេរៀនទី១៤: Properties ក្នុង Attribute

-ប្រកាស Declare ទទួលទៅ control អនុញ្ញាតសរសេរក្នុង properties ។

-បង្កើត interface ដែលប្រកាស declare properties ។

-អនុវត្ត properties នៅក្នុង structs និងបណ្តា class ដែល

ទទួលពី interface ដែលមានផ្ទុក properties ។

-អនុវត្ត interface មួយដែលប្រើការអនុវត្តន៍ជាក់ស្តែង interface ។

1. ប្រៀបធៀប Field និង Method

ចូរមើល struct ដែលបង្ហាញខាងក្រោមនេះប្រើសំរាប់បង្ហាញនៅលើ ទីតាំងកូរអរដោនេ (X, Y) ។ បញ្ហាជាមួយ struct នេះគឺវាមិនធ្វើទៅតាម

លក្ខណ:តួនាទីនៃ encapsulation; វាមិនរក្សាទុកទិន្នន័យដោយឡែក data private:

struct ScreenPosition

{

public ScreenPosition(int x, int y)

{

this.X = rangeCheckedX(x);

this.Y = rangeCheckedY(y);

}

public int X;

public int Y;

private static int rangeCheckedX(int x)

{

if (x < 0 || x > 1280)

{

throw new ArgumentOutOfRangeException(“X”);

}

return x;

}

private static int rangeCheckedY(int y)

{

if (y < 0 || y > 1024)

{

throw new ArgumentOutOfRangeException(“Y”);

}

return y;

}

}

ទិន្នន័យរួម Public data គឺជាគំនិតមិនប្រសើរ ពីព្រោះវាមិនអាចប្រើ ត្រួតពិនិត្យ checked និង controlled ។ ឧទាហរណ៍ ScreenPosition constructor ឆែកមើលជួរលំដាប់ parameters របស់វា ។ ប៉ុន្តែគ្មានជួរលំដាប់ ណាដែលធ្វើនៅលើ “raw” អនុញ្ញាតទៅក្នុង public fields ។

ScreenPosition origin = new ScreenPosition(0, 0);

int xpos = origin.X;

origin.Y = -100; // Oops

មធ្យោបាយរួមដើម្បីដោះស្រាយបញ្ហានេះគឺបង្កើត fields private និង បន្ថែមវិធី method មួយរួចហើយផ្លាស់ប្តូរវិធី method ដើម្បីអាន read និងសរសេរតំលៃនីមួយៗនៃ private field ដែលបានបង្ហាញ ។ ផ្លាស់ប្តូរវិធី methods អាចឆែកមើលជួរលំដាប់ដែលតំលៃ field ពិតប្រាកដពីព្រោះ constructor ដែលឆែករួចជាស្រេចតំលៃ initial field ។ ឧទាហរណ៍ (GetX) និងផ្លាស់ប្តូរ (SetX) សំរាប់ X field ។ កត់ចំណាំថារបៀបឆែក SetX checks តំលៃ parameter របស់វា:

struct ScreenPosition

{

public int GetX()

{

return this.x;

}

public void SetX(int newX)

{

this.x = rangeCheckedX(newX);

}

private static int rangeCheckedX(int x) { … }

private static int rangeCheckedY(int y) { … }

private int x, y;

}

ឧទាហរណ៍ខាងក្រោមនេះបង្កើនតំលៃនៃ X ដោយ 10 ។ ដើម្បីធ្វើដូច្នេះ វាបានអាចតំលៃនៃ X ដោយប្រើ GetX method រួចសរសេរតំលៃនៃ X ដោយ ប្រើវិធីផ្លាស់ប្តូរ SetX modifier method:

int xpos = origin.GetX();

origin.SetX(xpos + 10);

ប្រៀបធៀបតំលៃនេះជាមួយតំលៃសមមូលនៃ code ប្រសិនបើ X field គឺជា public:

origin.X += 10;

2. អ្វីដែលហៅថា Properties?

property គឺជាការឆ្លងកាត់ logical field និងវិធី physical method អ្នកប្រើ property មួយកំណត់ជាក់ច្បាស់មធ្យោបាយដែលអ្នកប្រើ field មួយ។          បន្ទាប់ពី code segment បង្ហាញក្នុង ScreenPosition struct សរសេរឡើងវិញដោយប្រើ properties ។ កាលណាដែលអាននេះ code កំណត់ចំណាំថាដូចខាងក្រោមនេះ:

· x និង y គឺជា fields ដោយឡែក

· X និង Y គឺជា field រួមដូចជា properties ។ X និង Y គឺមិនមែនជា methods ។ វាគ្មានសញ្ញាវង់ក្រចក វាផ្ទុកគ្រាប់តែទទួលនិងបង្កើត ។

struct ScreenPosition

{

public ScreenPosition(int X, int Y)

{

this.x = rangeCheckedX(X);

this.y = rangeCheckedY(Y);

}

public int X

{

get { return this.x; }

set { this.x = rangeCheckedX(value); }

}

public int Y

{

get { return this.y; }

set { this.y = rangeCheckedY(value); }

}

private static int rangeCheckedX(int x) { … }

private static int rangeCheckedY(int y) { … }

private int x, y;

}

ទទួល get Accessor

ប្រសិនបើប្រើ property មួយក្នុងការអាន read context ពេល compiler automatically ទៅក្នុង field របស់អ្នកដូចជា code នៅក្នុងហៅថា

ទទួល get accessor នៃ property នោះ ។ ឧទាហរណ៍ compiler automatically ដូចនេះ:

ScreenPosition origin = new ScreenPosition(0, 0);

int xpos = origin.X;

int ypos = origin.Y;

ធ្វើជាក់ស្តែងដូចនេះ:

int x = topLeft.x;

បង្កើត set Accessor

ប្រសិនបើអ្នកប្រើ property មួយនៅក្នុងការសរសេរ context ពេល

ដែល compiler automatically ក្នុង field code របស់អ្នកទៅក្នុងហៅទៅ set accessor នៃ property នោះ ។ ឧទាហរណ៍ compiler automatically ដូចនេះ:

origin.X = 40;

origin.Y = 100;

Read-Only Properties

អ្នកត្រូវបានអនុញ្ញាតដើម្បីប្រកាស declare property មួយដែលផ្ទុក ទទួល get accessor ។ ក្នុងករណីនេះអ្នកអាចប្រើ property គ្រាន់តែសំរាប់ អាចក្នុង context ។ ឧទាហរណ៍ ទីនេះមាន X property មួយនៃ ScreenPosition struct ដែលបានប្រកាស read-only property:

struct ScreenPosition

{

public int X

{

get { return this.x; }

}

}

X property មិនមានផ្ទុក set accessor; ព្យាយាមដើម្បីប្រើ X ក្នុងការសរសេរ context និងបរាជ័យ fail ។ ឧទាហរណ៍ :

origin.X = 140; // compile-time error

Write-Only Properties

អ្នកត្រូវបានអនុញ្ញាតដើម្បីប្រកាស declare property មួយដែលផ្ទុក set accessor តែមួយគត់ ។ ក្នុងករណីនេះអ្នកអាចគ្រាន់តែប្រើ property ក្នុងការសរសេរ context ។ ឧទាហរណ៍ X property នៃ ScreenPosition struct ដែលបានប្រកាសដូចជា write-only property:

struct ScreenPosition

{

public int X

{

set { this.x = rangeCheckedX(value); }

}

}

X property មិនផ្ទុក get accessor; ព្យាយាមប្រើ X ក្នុងការអាននៅ

ពេលបរាជ័យ fail ។ ឧទាហរណ៍:

Console.WriteLine(origin.X); // compile-time error

origin.X = 200; // compiles ok

origin.X += 10; // compile-time error

ស្វែងយល់ពី Property Restriction

¡ អ្នកអាចចាប់ផ្តើម property មួយនៃ struct  ឆ្លងកាត់ accessor ឧទាហរណ៍:

ScreenPosition location;

location.X = 40; // compile-time error, location not assigned

 

¡ អ្នកអាចប្រើ property មួយដូចជា ref ឬ out argument ឧទាហរណ៍:

MyMethod(ref location.X); // compile-time error

¡ អ្នកមិនអាចប្រកាស declare ដែលមាន properties ច្រើននៅក្នុង ការប្រកាស statement ទោល ។ ឧទាហរណ៍:

const int X { get { … } set { … } } // compile-time error

¡ អ្នកមិនអាចប្រកាស declare const ឬ read only properties ឧទាហរណ៍:

const int X {get{…} set{…}}//compile-time error

Properties គឺមិនមែន true fields ប៉ុន្តែវាមិនមែនជាវិធី true methods ។

¡ អ្នកអាចប្រកាស declare getset accessor ដែលទាំងពីរនេះ មាននៅក្នុង property ។

public int X

{

Console.WriteLine(“common code”);//compile-time error

get { …}

set {…}

}

¡ អ្នកមិនអាចប្រកាស declare ក្នុង property មួយដែលគឺជាប្រភេទ ទំនេរ ។ ឧទាហរណ៍:

public void X{get{…} set {…}}//compile-time error

¡ មិនអាចប្រកាស declare ក្នុង property មួយដោយគ្មាន parameter ឧទាហរណ៍:

public /*nothing*/ X {get{…}set{…}}

//compile-time error

¡ អ្នកមិនអាចប្រកាស declare ក្នុង property មួយជាពីរឬច្រើន parameters:

public int,string X { get{…}set{…}}

//compile-time error

3. ប្រើ Static Properties អ្នកអាចប្រកាស declare ពីប្រភេទនៃ fields ក្នុង class មួយឬ struct: instance fields (មួយក្នុង object) និង static fields (មានមួយក្នុង ប្រភេទ) ។ អ្នកអាចប្រើ properties ទៅក្នុង mimic instance fields ហើយ អ្នកអាចប្រើ static properties ទៅក្នុង mimic static fields ។ ដែល syntax សំរាប់ static property គឺច្បាស់លាស់ដូចជាសំរាប់ instance property លើកលែងតែអ្នកប្រកាស property នៅខាងមុខជាមួយ ពាក្យគន្លឹះ static ។ ឧទាហរណ៍ ទីនេះមាន ScreenPosition struct ដែលពេលនេះ ជាមួយ static read-only property ដែលតំណាងទំហំនៃ screen:

struct ScreenPosition

{

public static ScreenPosition Limits

{

get { return limits;}

}

private static int rangeCheckedX(int x)

{

if (x < 0 ││ x > limits.x)

{

throw new ArgumentOutOfRangeException(“X”);

}

return x;

}

private static int rangeCheckedY(int y)

{

if (y < 0 ││ y > limits.y)

{

throw new ArgumentOutOfRangeException(“Y”);

}

return y;

}

private static ScreenPosition vgaLimits =

new ScreenPosition(600, 800);

private static ScreenPosition limits = vgaLimits;

private int x, y;

}

4. ការប្រកាស Interface Properties អ្នកអាចប្រកាស declare properties នៅក្នុង interface ។ ដើម្បីធ្វើ ដូចនេះ អ្នកប្រកាស declare ទទួលពាក្សគន្លឹះ getset  ដែលមទាំងពីរនេះ ប៉ុន្តែការប្តូររូបរាងនៃ getset accessor ជាមួយសញ្ញា semicolon ។ ឧទាហរណ៍:

interface IScreenPosition

int X { get; set;}

int Y { get; set;}

}

class ឬ Struct ដែលអនុវត្ត interface នេះត្រូវការអនុវត្ត accessors ។ ឧទាហរណ៍:

struct ScreenPosition :IScreenPosition

{

public int X

{

get { return x; }

set { x = rangeCheckedX(value);}

}

public int Y

{

get {return y;}

set {y= rangeCheckedY(value);}

}

private int x, y;

}

ប្រសិនបើអនុវត្ត interface properties ក្នុង class មួយអ្នកអាច

ប្រកាស declare property ដូចជាការអនុវត្តន៍ជាក់ស្តែង ដែលអនុញ្ញាតអោយ classes មានលើការអនុវត្តន៍ ឧទាហរណ៍:

class ScreenPosition : IScreenPosition

{

public virtual int X

{

get{…}

set {…}

}

public virtual int Y

{

get {…}

set {…}

}

private int x, y;

}

អ្នកអាចជ្រើសរើសដើម្បីអនុវត្តក្នុង property ដោយប្រើ interface ជាក់ស្តែងក្នុងការអនុវត្តន៍ syntax ក្នុងជំពូកទី 12 ។ ការអនុវត្តន៍ជាក់ស្តែង property មួយគឺ non-public និង non-virtual ឧទាហរណ៍:

struct ScreenPosition :IScreenPosition

{

int IScreenPosition.X

{

get { return x; }

set { x = rangeCheckedX(value); }

}

int IScreenPosition.Y

{

get { return y; }

set { y = rangeCheckedY(value);}

}

private int x, y;

}

ក្នុងលំហាត់បន្ទាប់ អ្នកនឹងប្រើនិយមន័យ properties ឡើងវិញនៃ ប្រអប់ Microsoft Windows text និង Windows forms ដើម្បីបង្កើត គំរូកម្ម វិធីប្រើប្រាស់ដែលមើលឃើញទំហំ size នៃសន្លឹកចម្បង ។

ប្រើ properties

1. ចាប់ផ្តើមក្នុង Start Microsoft Visual Studio .NET។

2. បើកក្នុង Properties project ដែលមានទីតាំងក្នុង \Microsoft Press\Visual C# Step by Step\Chapter14\Properties folder ក្នុង My Documents folder របស់អ្នក ។

3. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ project builds និងរត់ដំណើរការ ។ សន្លឹក Windows form មើលឃើញប្រអប់ទ text ទទេពីរដែលមានឈ្មោះ labeled Width និង Height ។

4. បង្កើតទំហំ form ឡើងវិញ ។ ក្នុងប្រអប់ text ពីរនៅទទេ ។

5. បិទ form អ្នកត្រឡប់ទៅកម្មវិធី Visual Studio .NET ។

6. បើកប្រភព file Form1.cs នៅក្នុង Code pane ដែលមើលនៃការ ប្រកាសនៃ Width និងប្រះប់ Height text ។

6. ការប្រកាសនេះគឺនៅជិតខាងលើនៃ Form1.cs ដែលមើលឃើញដូច នេះ:

private System.Windows.Forms.TextBox width;

private System.Windows.Forms.TextBox height;

ដែល TextBox class ផ្ទុក public read/write string ដែលហៅថា Text (វាទទួល property នេះពីមូលដ្ឋាន base class: TextBoxBase):

abstract class TextBoxBase …

{

public override string Text

{

get {…}

set{…}

}

}

class TextBox : TextBoxBase

{

}

7. បន្ថែមពីរ statements ទៅក្នុងទំហំដែល resize method ឡើងវិញ statement ទីមួយផ្តល់ string “232” ទៅ Text property នៃប្រអប់ Width text ។ ទីពីរ statement ផ្តល់ string “96” ទៅ Text property នៃប្រអប់ Height text ។ ប្រើវិធី resize method នឹងមើលឃើញច្បាស់ដូចនេះ:

private void resize()

{

width.Text = “232”;

height.Text = “96”;

}

8. នៅលើ Debug menu ចុចលើ Start Without Debugging ។  project builds និងរត់ដំណើរការ ។ សន្លឹក Windows form មើលឃើញប្រអប់ text ពីរដែលផ្ទុកតំលៃ 232 និង 96 ។ បង្កើត set accessor នៃប្រអប់ TextBox ។ ដែល Text property កំណត់ច្បាស់ លាស់មានច្រើនជាង string មួយ ។ វាក៏បានធ្វើអោយច្បាស់ string របស់វាដែលមើលឃើញនិងក្លាយជា visible ។

ជំហានបន្ទាប់សរសេរ strings ត្រឹមត្រូវទៅក្នុង TextBox ។ Text   properties ក្នុងគោលបំណងបង្ហាញសន្លឹក window តែងតែមើលឃើញតំលៃ ត្រឹមត្រូវ ។

9. បិទ form អ្នកត្រឡប់ទៅក្នុងកម្មវិធី Visual Studio .NET ។

10. ប្រើ Scroll ឡើងលើ Form1.cs source file មើលការប្រកាស នៃ Form1 class ។ Form1 class ពី System.Windows.Forms.Form class:

public class Form1: System.Windows.Forms.Form

{

}

ក្នុង System.Windows.Forms.Form class ដែលផ្ទុក public read/write Size property:

private void resize()

{

width.Text = “232”;

height.Text = “96”;

}

ទំហំ property ត្រឡប់ទៅ instance នៃ struct មួយដែលហៅថា ទំហំដែលស្ថិតក្នុង System.Drawing namespace ។ ទំហំ Size struct ផ្ទុក public read/write int មួយដែលហៅថា Height និងមួយទៀតហៅថា Width:

struct Size

{

public int Height

{

get { … }

set { … }

}

public int Width

{

get { … }

set { … }

}

}

}

11. Scroll មកក្រោមប្រភព file Form1.cs មើល resize method ទីពីរ ។

12. ផ្លាស់ប្តូរពីរ statements ដើម្បី Size.Width ត្រូវបានផ្តល់ទៅ

អោយ width.Text និង Size.Height ត្រូវបានផ្តល់ height.Text property ។ អ្នកនឹងត្រូវការដើម្បីប្តូរពី int ទៅ string មួយ ។ មធ្យោបាយងាយបំផុតដើម្បីធ្វើដូចនេះប្រើ ToString method ។

private void resize()

{

int w = this.Size.Width;

width.Text = w.ToString();

int h = this.Size.Height;

height.Text = h.ToString();

}

13. នៅលើ Debug menu ចុចលើ Start Without Debugging ។ project builds និងរត់ដំណើរការ ។

14. Resize ទំហំឡើងវិញ Windows form ។ ដូចអ្នក resize ឡើង វិញប្រអប់ text boxes ប្តូរដើម្បីបង្ហាញការផ្លាស់ប្តូរទំហំ។

15. បិទ form ។ អ្នកត្រឡប់ទៅកម្មវិធី Visual Studio .NET ។ ចុងក្រោយអ្នកនឹងមើលឃើញទំហំនៃ form ដូចជាចំណង់ជើង form ។

16. មើល resize method ទីពីរក្នុងប្រភព file Form1.cs ។

17. បន្ថែមពីរឬច្រើន statements ទៅ resize method ។ statement ទីមួយនឹងប្រើ string.Forma ដើម្បីបង្កើត string ទោល ដែលផ្ទុក width និង height នៃ form ។ statement ទីពីរនឹងសរសេរ string នេះទៅ public read/write string Text នៃ form ។

private void resize()

{

int w = this.Size.Width;

width.Text = w.ToString();

int h = this.Size.Height;

height.Text = h.ToString();

string s = string.Format(“({0}, {1})”, w, h);

this.Text = s;

}

18. នៅលើ Debug menu ចុចលើ Start Without Debugging ។  project builds និងរត់ដំណើរការ ។
a

19. បិទ form អ្នកត្រឡប់ទៅកម្មវិធី Visual Studio .NET ។

សង្ខេបជំពូកទី ១៣

ប្រធានបទ

ការអនុវត្តន៍

ប្រកាស Declare read/write property

 

ប្រកាស Declare ប្រភេទនៃ property ឈ្មោះរបស់វា getAccessor និង set accessor ឧទាហរណ៍:struct ScreenPosition

{

public int X

{

get { … }

set { … }

}

}

ប្រកាស read-only property

 

ប្រកាស Declare property ជាមួយ get accessor  ឧទាហរណ៍:struct ScreenPosition{

public int X

{

get { … }

}

}

}

ប្រកាស Declare write-only property

 

ប្រកាស Declare property ជាមួយ set accessor ឧទាហរណ៍:struct ScreenPosition{

public int X

{

set { … }

}

}

ប្រកាស Declare property ក្នុង interface

 

ប្រកាស Declare property ជាមួយ ពាក្យគន្លឹះ get ឬ set ឧទាហរណ៍:interface IScreenPosition{

int X { get; set; } // no body

int Y { get; set; } // no body

}

អនុវត្ត interface property

 

ក្នុង class ឬ struct ដែលអនុវត្ត interface ប្រកាស declare property និងអនុវត្ត accessors។ឧទាហរណ៍:struct ScreenPosition : IScreenPosition

{

public int X

{

get { … }

set { … }

}

public int Y

{

get { … }

set { … }

}

}

 

 

មេរៀនទី១៥: ប្រើ Windows Application

មេរៀនទី១៥: ប្រើជាមួយ Windows Application

ក្នុងជំពូកនេះ លោកអ្នកនឹងរៀនអំពីរបៀប:

-បង្កើតកម្មវិធីប្រើប្រាស់ Microsoft Windows Form។

– ប្រើ Windows Form រួមដើម្បីត្រួតពិនិត្យដូចជា label, text box និង button ។

-ប្តូរ properties នៃ Windows Form និងត្រួតពិនិត្យនៅពេល design និងនៅពេលរត់ run time ។

-តំណើរការ Windows Form និងត្រួតពិនិត្យ control។

1.   បង្កើតកម្មវិធីប្រើប្រាស់ Application

អ្នកនឹងបង្កើតកម្មវិធីប្រើប្រាស់អនុញ្ញាតអោយអ្នកប្រើប្រាស់ user មួយ បញ្ចូលនិងមើលអោយ បានពិស្តារជាមួយសមាជិក member នៃ Middleshire Bell Ringer Association ដែលជាក្រុមប្រមូលផ្តុំអ្នកវិទ្យាសាស្រ្តពូកែបំផុត ។ អ្នកនឹងរក្សាកម្មវិធីប្រើប្រាស់ដែលងាយ ស្រួល ប្រមូលផ្តុំចេញពី form និងបង្កើត យ៉ាងច្បាស់ការងារទាំងអស់របស់គេ ។ ក្នុងជំពូកចុង ក្រោយនេះអ្នក នឹងផ្តល់ menusជាច្រើននិងរៀនពីរបៀបដើម្បីអនុវត្តអោយ បានត្រឹមត្រូវដើម្បីបង្កើត ច្បាស់លាស់ ទិន្នន័យ ដែលត្រូវបានបញ្ចូលបង្កើត។ គំរូបង្ហាញខាងក្រោមនេះ គឺជាកម្មវិធីប្រើប្រាស់ដែលរត់ដំណើរការ BellRingers.exe ដែលមានទីតាំងនៅ ក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 14\BellRingersComplete\bin\Release folder នៅក្នុង My Documents folder របស់អ្នក ។
aបង្្កើត Windows Form Application ក្នុងលំហាត់នេះ អ្នកនឹងចាប់ផ្តើមសង់ Middleshire Bell Ringer Association ដោយបង្កើត project ថ្មី  design form និងបន្ថែម Windows Forms control ទៅលើ form ។ ពីព្រោះអ្នកប្រើប្រាស់កម្មវិធីរួចស្រេច Windows Forms ក្នុង Microsoft Visual Studio .NET ។

បង្កើត MiddleShire Bell Ringers Association project

1. ចាប់ផ្តើមចូលក្នុង Start Visual Studio .NET។

2. នៅលើ File menu ចូលក្នុង New រួចហើយចុចលើ Project ។

3. នៅក្នុងប្រភេទ Project Types pane ជ្រើសរើស Visual C# Projects ។

4. ក្នុង Template pane ជ្រើសរើស Windows Application ។

5. ក្នុងឈ្មោះ Name text box វាយសរសេរ BellRingers ។

6. ក្នុងទីតាំងប្រអប់ list box មើលទៅក្នុង Microsoft Press\Visual C# Step by Step\Chapter 18 folder ក្នុង My Documents folder របស់អ្នក ។

7. ចុចលើ OK ចូលក្នុង project ថ្មីត្រូវបានបង្កើតនិងផ្ទុក blank form ដែលហៅថា Form1 ។

a

បង្កើត properties នៃ form

1. ជ្រើសរើស form ក្នុងសន្លឹក Designer View ។ ក្នុងសន្លឹក Properties ចុចលើឈ្មោះ (Name) property រួចហើយវាយសរសេរ MemberForm ក្នុងឈ្មោះប្រអប់ (Name) text ដើម្បីប្តូរឈ្មោះ name នៃ form ។ (ប្រសិនបើសន្លឹក Properties មិនត្រូវបានបង្ហាញ ចុចលើសន្លឹក Properties នៅលើ View menu ឬចុចលើ F4)

2. ក្នុងសន្លឹក Properties ចុចលើ Text property រួចហើយវាយ សរសេរ Middleshire Bell Ringers Association ដើម្បីផ្លាស់ប្តូរសមាជិក ចំណង់ជើង title bar នៃ form មួយ ។

3. នៅក្នុងសន្លឹក Properties ចុចលើ BackgroundImage property រួចហើយចុចលើប៊ូតុង Ellipses ក្នុងជិតប្រអប់ text box ។ បើកប្រអប់ dialog box ។

4. នៅក្នុង Open dialog box មើល\Microsoft Press\Visual C# Step by Step\Chapter 18 folder ក្នុង My Documents folder របស់អ្នក ជ្រើសរើស Bell.gif file រួចហើយចុចលើ Open ។ BackgroundImage property គឺបង្កើតទៅក្នុង bell image ។ ក្នុងប្រអប់សន្លឹក Properties ចុចលើ BackColor property រួចហើយចុចលើប៊ូតុង down-arrow នៅជិតប្រអប់ text box ។ បើកប្រអប់ dialog box មួយ ។

a5.​នៅលើ System tab នៃប្រអប់ dialog box ចុចលើ Window ។ បង្កើតពណ៌ background color នៃ controls ទាំងអស់ដែលអ្នក that you បញ្ចូលទៅក្នុង form ទៅក្នុងពណ៌ដូចគ្នាដូចជាសន្លឹករបស់វាផ្ទាល់ ។

6. ជ្រើសរើស Font property ។ ដែលផ្សំឡើងនៅក្នុង property ដែលមានលក្ខណ:កំណត់ជាច្រើន ។ ក្នុងសន្លឹក Properties ចុចលើសញ្ញាបូក plus sign (+) ដើម្បីពង្រើកមើល Font property និងមើលលក្ខណ:សំគាល់។ បង្កើតទំហំលក្ខណ:សំគាល់នៃ font គឺ 12 រួចហើយរើសយក Bold គឺ True ។ អ្នកអាចប្តូរ properties ដែលផ្សំឡើងដូចជា Font ដោយចុចលើ ប៊ូតុងEllipses ដែលបង្ហាញកាលណាអ្នកជ្រើសរើស property ។ កាលណា អ្នកចុចលើប៊ូតុង

ប្រអប់ស្តង់ដា Font dialog box បានបើកឡើងរួចហើយ អនុញ្ញាតអោយអ្នក

ជ្រើសរើស font និងលទ្ធផលដែលអ្នកចង់បាន ។

7.ប្តូរទំហំរបស់ form property ដែលផ្សំឡើងក្នុង property ។ ក្នុង សន្លឹក Properties ចុចលើសញ្ញាបូក plus sign (+) ដើម្បីពង្រើកទំហំ property រួចហើយមើលលក្ខណ:សំគាល់ ។ បង្កើតលក្ខណ:សំគាល់បណ្តោយ Width ពី 600 និងកំពស់ 450 ។ form នឹងមើលឃើញដូចខាងក្រោមនេះ។
aCompile កម្មវិធីប្រើប្រាស់

1. នៅលើ Build menu ចុចលើ Build Solution ។ project fails នៅពេល build និងបង្ហាញ compiler ដែលមាន error ដូចខាងក្រោមនេះ:

The type or namespace’Form1’could not be found(are you missing a using directive or an assembly reference)

ហេតុការណ៍នេះបណ្តាមកពី អ្នកប្តូរឈ្មោះរបស់ form ពី Form1 ទៅ MemberForm ។ project ផ្ទុក code ដែលព្យាយាមដើម្បីរត់ Form1 ពីព្រោះវា មិនអាចរក Form1 ពេលឥឡូវនេះ អ្នកត្រូវការដើម្បីជួសជុលបញ្ហា ។

2. ដើម្បីមើលប្រភព code Form1.cs នៅក្នុង Code និងសន្លឹក Text Editor ។

3. ប្រើ Scroll ចុះក្រោមរកមើល Main method ជិតចុងក្រោយបង្អស់ នៃ file ។ វាផ្ទុកបន្ទាត់ code ដូចខាងក្រោមនេះ:

Application.Run(new Form1());

4. ផ្លាស់ប្តូរ code នៅក្នុង Main method គោលបំណងអោយវាអាន ដូចខាងក្រោមនេះ:

Application.Run(new MemberForm());

5. Build កម្មវិធីប្រើប្រាស់ម្តងទៀត ។ ពេលនេះ build ទទួលជោគជ័យ ក្នុងករណីជាច្រើន កាលណាអ្នកប្តូរ property ដែលប្រើសន្លឹក Property កម្មវិធី Visual Studio .NET និង automatically updates code របស់វា ។ ឈ្មោះ form មួយគឺជាលក្ខណ:ពិសេសកន្លែងដែលអ្នកបង្កើតប្តូរដោយខ្លួនអ្នកផ្ទាល់។

ការបង្កើត Reset method
a

NotImplementedException

public void Reset()

{

throw new System.NotImplementedException();

}

ការសរសេរ code លើ Reset method:

firstName.Text = “”;

lastName.Text = “”;

ComboBox

towerNames.Items.Clear();

towerNames.Items.Add(“Great Shevington”);

towerNames.Items.Add(“Little Mudford”);

towerNames.Items.Add(“Upper Gumtree”);

towerNames.Items.Add(“Downley Hatch”);

ការបង្កើតកាលបរិច្ឆេទ date ថ្មី

memberSince.Value = DateTime.Today;

Initialize CheckBox

isCaptain.Checked = false;

button group

novice.Checked = true;

បញ្ចប់ Reset method ដោយបន្ថែម code ដូចខាងក្រោមនេះ:

methods.Items.Clear();

methods.Items.Add(“Canterbury Minimus”);

methods.Items.Add(“Reverse St Nicholas”);

methods.Items.Add(“Plain Bob Doubles”);

methods.Items.Add(“Grandsire Doubles”);

methods.Items.Add(“Cambridge Minor”);

methods.Items.Add(“Old Oxford Delight Minor”);

methods.Items.Add(“Kent Treble Bob Major”);

InitializeComponent method

ប្រសិនបើអ្នកមើលរវាង Dispose និង Main methods ក្នុងប្រភព code អ្នកនឹងឃើញតំបន់បំព្រួញ code ដែលមានសញ្ញា  Windows Form Designer ដែលបំព្រួញ code ដូចបង្ហាញខាងក្រោមនេះ ។
a

2. ប្រើលើ  Windows Form Control

ក្នុងលំហាត់នេះ អ្នកនឹងបន្ថែម controls ទៅក្នុង form មួយដែល អនុញ្ញាតអោយអ្នកប្រើប្រាស់ user ចូលទៅក្នុងសមាជិក ។ អ្នកនឹងប្រើភាពខុស គ្នានៃ controls  ដែលប្រភេទលក្ខណ:ពិសេសនីមួយៗសមស្របគ្នានៃទិន្នន័យ បញ្ចូល data input ។ កាលណាអ្នកប្រើប្រាស់ user ត្រូវបានបញ្ចូលសមាជិក បន្ថែមប៊ូតុងនឹងបញ្ជាក់ត្រឹមត្រូវនិងប្រមូលរក្សាទុកទិន្នន័យ data ។ user អាច ចុចលើ Clear ដើម្បីបង្កើត controls ឡើងិវិញនៅលើ form និង cancel ទិន្នន័យ data ដែលបានបញ្ចូល ។ បន្ថែម Windows Forms controls

1. បង្កើត Form1 ច្បាស់លាស់ត្រូវបានបង្ហាញក្នុងសន្លឹក Designer View ដែល Toolbox  ពិនិត្យមើលសន្លឹក Forms ត្រូវបានជ្រើសរើស និង ទាញ Label control នៅលើ MemberForm ។ (ប្រសិនបើ Toolbox មិនបង្ហាញ ចុចលើ Toolbox ពីក្នុង View menu)

2. នៅក្នុងសន្លឹក Properties ចុចលើទីតាំង property រួចហើយវាយ សរសេរ 10, 20 ដើម្បីបង្កើតទីតាំង property នៃ label ។

3. ពីក្នុង Toolbox ទាញប្រអប់ TextBox control នៅលើ MemberForm បន្ទាប់មកទៅក្នុង label ។ មិនបារម្ភពីត្រង់ជួរប្រអប់ TextBox ពិតជាក់ច្បាស់ពីព្រោះ អ្នកនឹងបង្កើតទីតាំង property សំរាប់ controls បន្ទាប់

ចុងក្រោយ ។

4. បន្ថែម Label ទីពីរទៅក្នុង form ។ កន្លែងវាបន្ទាប់មកទៅក្នុងប្រអប់ TextBox ក្នុង 300, 20 ។

5. បន្ថែមប្រអប់ TextBox ផ្សេងទៀតទៅក្នុង MemberForm និង

ទីតាំងវាបន្ទាប់មលទៅក្នុង Label ទីពីរ ។

6. ពីក្នុង Toolbox ទាញ Label នៅលើ form ។ កន្លែងវាផ្ទាល់នៅ

ក្រោម Label ទីមួយ ។

7. ពីក្នុង Toolbox ទាញប្រអប់ ComboBox មួយនៅលើ form ។ កន្លែងវានៅលើ MemberForm ក្រោមប្រអប់ TextBox ទីមួយនិងបន្ទាប់មក

ទៀតទៅក្នុង Label ទីបី ។

8. ពី Toolbox ទាញប្រអប់ CheckBox ដាក់លើ form និងកន្លែងវា នៅក្រោមប្រអប់ TextBox ទីពីរ ។

9. បន្ថែម Label ទីបួនទៅក្នុង MemberForm និងកន្លែងវានៅក្រោម Label​ ទីបី ។

10. ពីក្នុង Toolbox ទាញ DateTimePicker ហើយកន្លែងវានៅក្រោម ComboBox ។

11. ពីក្នុង Toolbox​ ទាញប្រអប់ GroupBox និងកន្លែងវានៅក្រោម Label control ទីបួន ។

12. ពីក្នុង Toolbox ទាញ RadioButton control និងវានៅខាងក្នុង GroupBox control ដែលអ្នកទើបតែបន្ថែម ។ កត់ចំណាំថា GroupBox គឺត្រូវ បានជ្រើសរើសកាលណាអ្នកទាញ RadioButton នៅលើវា ។

 

13. បន្ថែម បីឬច្រើន RadioButton controls  ដែលនៅជួរឈរជាមួយ នីមួយៗផ្សេងទៀត ទៅក្នុង GroupBox ។ អ្នកអាចត្រូវការបង្កើត GroupBox ដ៏ធំជាងគេផ្សំលើវា ។

14. ពីក្នុង Toolbox ទាញ CheckedListBox control និងកន្លែងវានៅ ក្រោម Label ទីពីរនិងនៅខាងស្តាំដៃនៃ GroupBox control ។

15. ពីក្នុង Toolbox ទាញ Button control កន្លែងវានៅជិតខាងក្រោម ឆ្វេងដៃនៃ MemberForm ។

16. បន្ថែមប៊ូតុង control ទៅខាងក្រោមនៃ form ដែលទើបតែដាក់នៅ ខាងស្តាំដៃទីមួយ ។

បង្កើតសមាសភាព Control Properties

អ្នកឥឡូវនេះត្រូវការដើម្បីបង្កើត properties នៃ controls ដែលអ្នក ទើបតែបន្ថែមទៅ form ។ ដើម្បីប្តូរតំលៃ property របស់ Control ចុចលើ  control ដើម្បីជ្រើសរើសវា រួចហើយបញ្ចូលត្រឹមត្រូវតំលៃក្នុងសន្លឹក Properties ។ អ្នកនឹងចាប់ផ្តើមជាមួយមូលដ្ឋាន properties ។ តារាងខាង

ក្រោមនេះបញ្ជី properties និងតំលៃដែលអ្នកត្រូវការដើម្បីផ្តល់នីមួយទៅបណ្តា controls ។

Control Property Value
label1 Text First Name
Location 10, 20
textBox1 (Name) firstName
Location 120, 20
Size 170, 26
Text leave blank
label2 Text Last Name
Location 300, 20
textbox2 (Name) lastName
Location 400, 20
Size 170, 26
Text leave blank
label3 Text Tower
Location 10, 72
comboBox1 (Name) tower
DropDownStyle DropDownList (setting នេះអ្នកប្រើប្រាស់users ដកស្រង ពីក្នុង items នៅក្នុង list; អ្នកប្រាស់ users មិនអាចប្រើប្រាស់ប្រភេទ ក្នុងតំលៃនៃកម្មសិទ្ធិរបស់វាផ្ទាល់)
Location 120, 72
Size 260, 28
checkBox1 (Name) captain
Location 400, 72
Size 100, 26
Text Captain
CheckAlign MiddleLeft (កាលណា ចុច drop-down arrow សំរាប់Property នេះមានសារ:សំខាន់ graphic ផ្ទុកបង្ហាញ សំណាញ់ grid ។
label4 Text Member Since
Location 10, 128
Size 120, 23
Text Member Since
DateTimePicker (Name) memberSince
Location 140, 128
Size 200, 26
groupBox1 (Name) Experience
Location 10, 184
Size 260, 160
Text Experience
radioButton1 Name Novice
Location 16, 32 (កត់ចំណាំថា ទីតាំងដែលទាក់ទងទៅប៊ូតុង radio ដែលជាអ្នកផ្ទុក GroupBox)
Size 220, 24
Text Up to 1 year
radioButton2 (Name) Intermediate
Location 16, 64
Size 220, 24
Text 1 to 4 years
radioButton3 Name) Experienced
Location 16, 96
Size 220, 24
Text 5 to 9 years
radioButton4 (Name) Accomplished
Location 16, 128
Size 220, 24
Text 10 or more years
checkedListBox1 (Name) Methods
Location 300, 192
Size 270, 160
Sorted True
button1 (Name) Add
Location 190, 368
Size 75, 40
Text Add
button2 (Name) Clear
Location 335, 368
Size 75, 40
Text Clear

3. ប្រើ Control Properties

ដូចជា forms ត្រួតពិនិត្យ controls ដែលមាន properties ជាច្រើន ដែលអ្នកអាចបង្កើត ។ ដែលប្រភេទខុសគ្នានីមួយៗនៃ control មានភាពខុស គ្នានៃ properties ។  ដូចជា forms អ្នកអាចបង្កើត set និង query control properties ដោយ dynamically ក្នុងកម្មវិធីផ្ទាល់របស់អ្នកនិងមានចំនួននៃ properties ដែលជាអថេរតែមួយគត់នៅពេលរត់ run ដំណើរការ ។ ប្រសិនបើ អ្នកចង់រៀនអំពីភាពខុសគ្នានៃអថេរ properties សំរាប់ប្រភេទនីមួយៗនៃ control ។ អ្នកអាចរកមើលក្នុង list របស់វាក្នុង.NET Framework SDK ដែលអនុវត្តជាមួយ Visual Studio .NET ។

ប្តូរ Properties Dynamically

អ្នកត្រូវបានប្រើ Design View ដើម្បីបង្កើត properties ។ កាលណា form រត់ដំណើរការ វានឹងប្រើប្រាស់បង្កើតតំលៃឡើងវិញរបស់ control នីមួយៗ ទៅតំលៃ initial default ។ ដើម្បីធ្វើដូចនេះអ្នកនឹងត្រូវការសរសេរ code មួយ ចំនួន (នៅចុងក្រោយ) ។ ក្នុងលំហាត់បន្ទាប់ អ្នកនឹងបង្កើត private method ដែលហៅថា Reset ។ ចុងក្រោយអ្នកនឹងហៅ Reset method កាលណា form ដំបូងចាប់ផ្តើមនិងកាលណាអ្នកប្រើប្រាស់ user  ចុចលើប៊ូតុង Clear ។

បង្កើត  Reset method

1. នៅលើ View menu ចុចលើ Class View

2. ក្នុងសន្លឹក Class View window ពង្រើក BellRingers project ពង្រើក { } BellRingers ឈ្មោះ namespace រួចចុចលើ right-click នៃ MemberForm class ។ ពេលនោះ menu បានបង្ហាញ ។

3. នៅលើ menu ចំណុចដើម្បីបន្ថែម Add រួចចុចលើ Add Method កម្មវិធី C# Method Wizard បានបើកឡើង ។

4. វាយសរសេរ Reset ក្នុងប្រអប់ Method Name box រួចចុចលើ Finish ។

5. ក្នុង Code និងសន្លឹក Text Editor បន្ថែមបន្ទាត់បន្តបន្ទាប់នៃ code ទៅក្នុង Reset method:

firstName.Text = “”;

lastName.Text = “”;

មានពីរ statements កំណត់ច្បាស់លាស់ពីប្រអប់ firstName និង lastName គឺជា blank ដែលផ្តល់ string ទទេទៅ Text property របស់គេ ។

ComboBox

ប្រសិនបើហៅឡើងវិញ Tower ComboBox និងផ្ទុក list មួយនៃ bell towers ទាំងអស់ក្នុង Middleshire district ។ ពត៌មាននេះនឹងជាទូទៅជំនួយ database និងសរសេរ code ទទួលបានពី list នៃ towers និង ComboBox ComboBox មាន property មួយដែលហៅថា Items ដែលផ្ទុក contains ប្រមូលផ្តុំទិន្នន័យ data ដើម្បីបង្ហាញ ។ ពីព្រោះអ្នកមិនបានបង្ហាញរបៀបដើម្បី អនុញ្ញាតចូលក្នុង database នៅឡើយ ។ កម្មវិធីប្រើប្រាស់អនុវត្តន៍នឹងប្រើ ពិបាកសរសេរប្រមូលផ្តុំ code។ ក្នុងវិធី Reset method បន្ទាប់ពីអ្នកបាន សរសេររួចរាស់មកបន្ថែម statements ដូចខាងក្រោមនេះទៅ list (នេះមាន សារះសំខាន់ ពីព្រោះថាផ្សេងពីនេះទៀតអ្នកអាចបញ្ចប់ជាមួយតំលៃក្នុង list) និងបង្កើត items បួនក្នុង ComboBox:

tower.Items.Clear();

tower.Items.Add(“Great Shevington”);

tower.Items.Add(“Little Mudford”);

tower.Items.Add(“Upper Gumtree”);

tower.Items.Add(“Downley Hatch”);

Initializing the CheckBox

ក្នុង captain CheckBox និងប្រើ default គឺ False ។ ដើម្បីធ្វើដូច

នេះអ្នកត្រូវការបង្កើត Checked property ។ បន្ថែម Add statement ទៅក្នុង Reset method ដូចខាងក្រោមនេះ:

captain.Checked = false;

Initializing the radio លើប៊ូតុង group

form ផ្ទុកមានបួនប៊ូតុង radio ដែលបង្ហាញពីចំនួននៃឆ្នាំ bell ringing ប៊ូតុងគឺប្រហាក់ប្រហែលទៅនឹង CheckBox ដែលនៅក្នុងវាអាចផ្ទុកតំលៃ True ឬ False ។ យ៉ាងណាក៏ដោយប៊ូតុង radio កើនឡើងកាលណាអ្នកដាក់វា ទៅក្នុង GroupBox ។ បន្ថែម Add statement ដូចខាងក្រោមនេះដើម្បីបង្កើត Reset method:

novice.Checked = true;

បំពេញបន្ថែម  ListBox

ដូចជា Tower ComboBox, CheckedListBox ដែលផ្ទុកក្នុង list នៃ bell ringing methods ដែលមាន property ដែលហៅថា Items ផ្ទុកប្រមូល ផ្តុំនៃតំលៃដើម្បីបង្ហាញ ដូចជា ComboBox តាមធម្មតាពី database ។ ទោះបី ពីមុនអ្នកអនុវត្តតំលៃពិបាកក្នុងការសរសេរ code ។ Reset method ពេញ

លេញបន្ថែម code ដូចខាងក្រោមនេះ:

methods.Items.Clear();

methods.Items.Add(“Andover Bob Minor”);

methods.Items.Add(“Antelope Place Doubles”);

methods.Items.Add(“Hayfield Royal”);

methods.Items.Add(“West Chiltington Doubles”);

methods.Items.Add(“Brandon Parva Maximus”);

methods.Items.Add(“Buckfast Abbey Triples”);

methods.Items.Add(“Skelwith Bridge Minor”);

methods.Items.Add(“Acton Trussel Bob Royal”);

Compile តែសកម្មវិធីប្រើប្រាស់

1. ក្នុង Solution Explorer ចុចលើ right-click Form1.cs ចុចលើ Rename រួចហើយវាយសរសេរ MemberForm.cs ។

2. នៅលើ Debug menu ចុចលើ Start ដើម្បីមើលឡើងវិញ project compiles និងរត់ដំណើរការ ។

3. កាលណា form រត់ដំណើរការ ចុចលើ Tower ComboBox ។ អ្នក នឹងឃើញ list នៃ bell towers រួចហើយអ្នកអាចជ្រើសរើសមួយបន្ថែមលើវា។

4. ចុលើ drop-down arrow ខាងស្តាំដៃនៃ Member Since date/time picker ។

5. អ្នកនឹងបង្ហាញជាមួយ calendar នៃកាលបរិច្ឆេទ dates ។ តំលៃ default នឹងបង្ហាញការបរិច្ឆេទដែលកំពុងប្រើ ។ អ្នកអាចចុចលើ date រួចហើយ

ប្រើ arrows ដើម្បីជ្រើសរើស month ។

6. ចុចលើប៊ូតុង radio នីមួយៗក្នុង Experience group ។ កត់ចំណាំ ថាអ្នកមិនអាចជ្រើសរើសច្រើនជាងមួយក្នុងពេលមួយ ។

7. នៅក្នុងប្រអប់ Methods list box ចុចលើ methods មួយចំនួន រួចជ្រើសរើសប្រអប់ check box សមស្រប ។ អ្នកនឹងចុចពីរដងដើម្បីជ្រើស

រើសឬធ្វើអោយបានច្បាស់លើ method ។

8. បិទ form និងត្រឡប់ទៅកម្មវិធី Visual Studio .NET ។

ដំណើរការ Event ក្នុងសន្លឹក Windows Form
a
Method​ និងសរសេរដូចខាងក្រោមនេះ

 

private void clearClick(object sender, System.EventArgs e)

 

{

 

this.Reset();

 

}

 

ការបន្ថែម code ទៅ addClick method:

 

string details;

 

details = “Member name ” + firstName.Text + ” ”

 

+ lastName.Text + ” from the tower at ” + towerNames.Text;

 

MessageBox.Show(details, “Member Information”);

 

 

មេរៀនទី១៦: Menu និង Dialog Box

មេរៀនទី១៦: Menu និង Dialog Box

ក្នុងជំពូកនេះ អ្នកនឹងរៀនពីរបៀបធ្វើ:

-បង្កើត Create និង edit menu សំរាប់កម្មវិធីប្រើប្រាស់ Windows Forms application។

-ប្រើ MainMenu control

– ឆ្លើយតបទៅនិង menu event សំរាប់សំដែងការដំណើរការ កាលណាអ្នកប្រើប្រាស់ user menu command ។

-រៀបចំ menus ជាកម្មវិធីនិងបង្កើត dynamic menu។

-បង្កើត Create context និង pop-up menu។

1.   ការណែនាំ Menu និង Style ប្រសិនបើអ្នកមើលក្នុងកម្មវិធីប្រើប្រាស់ Windows application ជា ច្រើន អ្នកនឹងកត់ចំណាំថាមាន item មួយចំនួននៅលើ menu bar ដែល បង្ហាញក្នុងកន្លែងតែមួយដូចគ្នា ហើយមាតិកានៃ item ទាំងនេះគឺតែងតែព្យាករ ទុក ។ ឧទាហរណ៍ File menu គឺជាប្រភេទដំបូងរបស់ item នៅលើ menu bar និងនៅលើ menu នេះអ្នកអាចវាយសរសេររកមើល command សំរាប់បង្កើតឯកសារថ្មី ដែលបានបើកឯកសាររួចស្រេច។ រក្សា save ឯកសារ print ឯកសារ និងកម្មវិធីប្រើប្រាស់ ។ ការបញ្ជា commands ដែលបង្ហាញឆ្លងកាត់កម្មវិធីប្រើប្រាស់ដូចគ្នា; ឧទាហរណ៍ Exit command គឺមិនប្រែប្រួលហើយ command ចុងក្រោយនៅ លើ File menu ។ ហើយអាចមានលក្ខណ:ពិសេសកម្មវិធិប្រើប្រាស់ផ្សេងៗទៀត ដែលប្រើ commands នៅលើ File menu បានល្អប្រសើរ ។ កម្មវិធីប្រើប្រាស់ តែងតែមាន Edit menu ដែលផ្ទុក command ដូចជា Cut, Paste, Clear, និង Find។

2.   បន្ថែម Menu និងដំណើរការ Menu Event

កម្មវិធី Microsoft Visual Studio .NET អនុញ្ញាតអោយអ្នកបន្ថែម menus ជាច្រើននិង menu items ទៅក្នុង form មួយដែលក្នុងពីរមធ្យោបាយ អ្នកអាចប្រើកម្មវិធី Visual Studio .NET integrated development environment (IDE) និង menu editor ដើម្បីបង្កើត menu graphically មួយ អ្នកអាចសរសេរ code បានផងដែរដែលបង្កើត MainMenu object (MainMenu គឺជា class ដែលបានផ្តល់និយមន័យក្នុង Windows Forms library) រួចហើយបន្ថែម MenuItem objects ទៅអោយវា (MenuItem គឺជា class ផ្សេងទៀតដែលមានក្នុង Windows Forms library) ។

3. បង្កើត Menu ក្នុងលំហាត់ខាងក្រោមនេះ អ្នកនឹងប្រើ graphical ឈានទៅបង្កើត menus សំរាប់កម្មវិធីប្រើប្រាស់ Middleshire Bell Ringers Association ។ យើងនឹងធ្វើបែបណាដើម្បីបង្កើត menus ជាកម្មវិធីប្រើប្រាស់ ។

បង្កើត File menu

1. ចាប់ផ្តើមចូលក្នុង Start Visual Studio .NET

2. បើក BellRingers project ដែលមានទីតាំង \Microsoft Press\Visual C# Step by Step\Chapter 15\BellRingers folder ក្នុង My Documents folder របស់អ្នក ។ Middleshire Bell Ringers នេះគឺជាកម្ម វិធីប្រើប្រាស់ ។

3. មើល MemberForm ក្នុងសន្លឹក Design View (ចុចលើ MemberForm.cs ក្នុង Solution Explorer រួចចុចលើ click Designer នៅ លើ View menu) ។

4. ក្នុង Toolbox ទាញ MainMenu control មួយលើ MemberForm
aបញ្ចូលប្រភេទ E&xit រួចហើយចុចលើ Enter
aប្រភេទ Menu Strip Item
aបង្កើត menu item properties ចុចលើ Properties Window នៅលើ View menu ឬចុចលើ F4 ចុចស្តាំលើ File menu item នៅលើ menu strip នៃ MemberForm
aឆែកលើ Ctrl Modifier រួចហើយជ្រើសរើស N ហើយចុចលើ Enter
a

4. control ដោយប្រើ default ដែលហៅថា mainMenu1 បង្ហាញនៅ ខាងក្រោមនៃ form និង menu bar ដែលផ្ទុក caption ប្រភេទនេះបន្ថែម ទៅក្នុង form ។

5. ចុចលើប្រភេទ caption នៅលើ menu bar, type &File, និង ចុចលើ Enter ។ (ប្រសិនបើ menu bar មិនបង្ហាញចុចលើ mainMenu1 control នៅខាងក្រោម form និង menu បង្ហាញ) ។ ដូចអ្នកវាយសរសេរ ទីពីរ សរសេរ caption បង្ហាញទៅខាងស្តាំនៃ item ហើយទីបីវាយសរសេរ caption ដែលបង្ហាញនៅក្រោម File menu item ។

6. ចុចលើហើយវាយសរសេរ caption ដែលបង្ហាញនៅក្រោម File menu item, type &New រួចហើយចុចលើ Enter ។

7. ចុចវាយសរសេរ caption ក្រោម New menu item, type &Open, រួចចុចលើ Enter ។

8. ចុចលើហើយវាយសរសេរ caption ក្រោម Open menu item វាយសរសេរ &Save Member រួចចុចលើ Enter ។

9. ចុចលើវាយសរសេរ caption ក្រោម Save Member menu item, វាយសរសេរសញ្ញា minus sign (-) រួចុចលើ Enter ។ សញ្ញាដកបង្ហាញដូចជា កក្តា menu ដែលប្រើជាក្រុមដែលទំនាក់ទំនង menu items ។

10. ចុចលើវាយសរសេរ caption ក្រោម separator bar, type &Print រួចចុចលើ Enter។

11. ចុចលើសរសេរ caption ក្រោម Print menu item វាយសរសេរ សញ្ញា (-) រួចចុចលើ Enter ។

12. ចុចលើវាយសរសេរ caption ក្រោម separator bar ទីពីរសរសេរ E&xit រួចចុចលើ Enter។
aបង្កើត Menu Item Properties ក្នុងលំហាត់ខាងក្រោមនេះធ្វើការបង្កើត properties នៃ MainMenu control និង menu items ។ អ្នកនឹងប្រើសន្លឹក Properties ដែលអ្នកទើបតែ បានធ្វើ កាលណាអ្នបង្កើត properties សំរាប់ Windows formនិង controls

បង្កើត menu item properties

1. ចុចលើ mainMenu1 control ក្រោម form ។ ក្នុងសន្លឹក Properties ប្តូរឈ្មោះរបស់វាទៅ mainMenu ។ (ប្រសិនបើសន្លឹក Properties មិនត្រូវបានបង្ហាញ ត្រូវចុចលើ Properties Window ពីក្នុង View menu)

2. ចុចលើ Right-click ក្នុង File menu item លើ menu bar នៃ MemberForm ។ នៅលើ menu ដែលបានបង្ហាញចុចលើ Edit Names ។  menu editor បានបង្ហាញឈ្មោះនៃ menu items ដែលមាន text របស់គេ ។

a3. ចុចលើ menuItem1 item នៅលើ menu bar វាយសរសេរ fileItem រួចហើយចុចលើ Enter ។ ប្តូរឈ្មោះនៃ menu items ដែលនៅសេស សល់ដោយប្រើព៌តមាននៅក្នុងតារាងខាងក្រោមនេះ:

Item New name
[menuItem2] newItem
[menuItem3] openItem
[menuItem4] saveItem
[menuItem6] printItem
[menuItem8] exitItem

4. កាលណាអ្នកបានបញ្ចប់ចុចលើ right-click នៃ fileItem menu រួច uncheck លើ Edit Names option ។

5. ជ្រើសរើស Save Member menu item ក្នុង File menu ក្នុង MemberForm រួចចុចលើ Shortcut ក្នុងសន្លឹក Properties ។ ជ្រើសរើស CtrlS option ពីក្នុង drop-down list ។ ទោះបីជាតំលៃសំរាប់ shortcut keys មានឈ្មោះដូចជា CtrlS និង AltF4 កាលណាវាត្រូវបានបង្ហាញនៅលើMenu វាបង្ហាញដូចជា: Ctrl+S and Alt+F4 ។
a6. មាន property ផ្សេងទៀតដែលហៅថា ShowShortcut ក្រោម Shortcut property ។ property នេះកំណត់ថាតើ shortcut key ត្រូវបាន បង្ហាញនៅលើ menu កាលណាកម្មវិធីប្រើប្រាស់ត្រូវរត់ដំណើរការ ។

7. ប្តូរ shortcut keys របស់ menu items ផ្សេងទៀតដោយប្រើតំលៃ នៅក្នុងតារាងខាក្រោមនេះ ។

Item Shortcut
newItem CtrlN
openItem CtrlO
printItem CtrlP
exitItem AltF4

8. ចុចលើ printItem item នៅលើ File menu រួចហើយចុចលើ Enabled ក្នុងសន្លឹក Properties ។ ជ្រើសរើស False option ពី drop-down list ។ អ្នកនឹងសរសេរ code មួយចំនួនដើម្បី update property នេះទៅ True បន្ទាប់ពី data ត្រូវបានមើលឃើញ ។

តែស menu

1. នៅលើ Debug menu ចុចលើ Start (ឬចុចលើ F5) ដើម្បី compile និងរត់ដំណើរការកម្មវិធីប្រើប្រាស់ ។

2. កាលណា form បង្ហាញចុចលើ File menu ។ menu របស់អ្នក

បង្ហាញ ។ កំណត់ចំណាំថា Print command ត្រូវបាន disabled ។ អ្នកអាច ចុចលើចុចលើ commands ផ្សេងទៀត ។

3. ចុចលើ form អ្នកមិនអាចប្រើ Exit command នៅលើ File menu ដែលមិនទាន់មាន; ប្រើ System menu ជំនួស ។

4. ចុចលើ Exit ដែល form ព្យាយាមបិទ close ។ អ្នកត្រូវបានស្នើសុំ ប្រសិនបើ អ្នកបានធ្វើច្បាស់លាស់ដើម្បីបិទ form ។ ប្រសិនបើអ្នកចុចលើ No form ដែលនៅសេសសល់បានបើក; ប្រសិនបើចុចលើ Yes ពេលនេះ form closes និងកម្មវិធីប្រើប្រាស់ត្រូវបានបញ្ចប់ ។

5. ចុចលើ Yes ដើម្បីបិទ form ។

Pop-Up Menu

មានកម្មវិធីប្រើប្រាស់ Windows applications ទំនើបជាច្រើនបាន បង្កើតប្រើ pop-up menus ដែលបង្ហាញកាលណាអ្នកចុចលើ right-click form ឬ control ។ menus តែងតែមាន context-sensitive និងបង្ហាញ commands ដែលអាចអនុវត្តទៅក្នុង control ឬ form ដែលបង្ហាញចំណុចរួម

បង្កើត Pop Up Menu

លំហាត់ខាងក្រោមនេះ អ្នកនឹងបង្កើត pop-up menus ពីរ ។ pop-up menu ទីមួយត្រូវបានភ្ជាប់ទៅ firstName និង lastName text box controls ហើយអនុញ្ញាតអោយអ្នកប្រើប្រាស់កំណត់ច្បាស់ controls ។ pop-up Menu ទីពីរត្រូវបានភ្ជាប់ទៅ form និងផ្ទុក commands ដើម្បីរក្សាទុក ដែលអាចមើលពត៌មានរបស់សមាជិកនិងសំរាប់ធ្វើអោយបានច្បាស់ form ។ ដើម្បីធ្វើ ដូចនេះ អ្នកបង្កើតដោយប្រើ menu item ដែលមានស្រេចជាងការប្រសើជាការ បង្កើតថ្មីមួយ ។

បង្កើត first Name និង last​ Name pop up menu

1. ក្នុងសន្លឹក Design View ដែលមើលឃើញ MemberForm ទាញ ContextMenu control ពីក្នុង Toolbox រួចហើយ drop វាលើ form ។ (ប្រសិនបើ Toolbox មិនអាច visible ចុចលើ Toolbox ពីក្នុង View menu) ContextMenu object ដែលហៅថា contextMenu1 បង្ហាញខាងក្រោមនៃ form ។
a2. ជ្រើសរើស contextMenu1 control វាយសរសេរ textBoxMenu ក្នុងប្រអប់ (Name) text box ក្នុងសន្លឹក Properties រួចហើយចុចលើ Enter

3. ចុចលើ Context Menu title text វាយសរសេរ caption ដែល

បង្ហាញក្រោមវា ។

4. ចុចវាយសរសេរ caption វាយសរសេរ Clear Text រួចចុចលើ Enter ។

5. ចុចលើ Clear Text caption សរសេរ textBoxClearItem ក្នុងប្រអប់ (Name) text box ក្នុងសន្លឹក Propertiesរួចចុចលើ Enter ។

6. ចុចលើប្រអប់ firstName text box control (ដំបូងឈ្មោះ Name label) ។ ក្នុងសន្លឹក Properties ប្តូរ ContextMenu property ទៅជា textBoxMenu ។

7. ចុចលើប្រអប់ lastName text box control ក្នុងសន្លឹក Properties ប្តូរ ContextMenu property ទៅជា textBoxMenu ។ (controls ជាច្រើនត្រូវបានអនុញ្ញាដើម្បីចែកចាយ same pop-up menu ដូចគ្នា) ។

8. ចុចលើ Right-click  textBoxMenu control នៅខាងក្រោមនៃ form រួចចុចលើ Edit Menu។ menu មួយបង្ហាញ Context Menu caption ។

9. នៅលើ menu ចុចលើ Clear Text ។

10. ក្នុងសន្លឹក Properties ចុចលើប៊ូតុង Events វាយសរសេរ textBoxClearClick ក្នុងការចុចលើ event text box រួចចុចលើ Enter ។ event method ថ្មីដែលហៅថា textBoxClearClick គឺត្រូវបានបង្កើតក្នុង Code និង Text Editor ។

11. បន្ថែម statement ខាងក្រោមទៅ textBoxClearClick event method:

if (this.Tag.Equals(firstName))

{

firstName.Clear();

firstName.Focus();

}

else

{

lastName.Clear();

lastName.Focus();

11. ប្រសិនបើ SourceControl property នៃ pop-up menu យោងតាមប្រអប់ firstName text box និង firstName.Clear method ។

12. នៅលើ Debug menu ចុចលើ Start ។ project compiles រួចរត់ ដំណើរការ ។

13. កាលណា form បង្ហាញវាយសរសេរឈ្មោះទៅក្នុង First Name និងប្រអប់ Last Name text boxes ។

14. ចុចលើ Right-click នៃប្រអប់ First Name text box ។ pop-up menu បង្ហាញដែលផ្ទុក Clear Text command ។

15. ចុចលើ Clear Text command ។ ប្រអប់ First Name text box បានបង្ហាញច្បាស់ ។

16. វាយសរសេរឈ្មោះទៅក្នុងប្រអប់ First Name text box រួចប្តូរ move ទៅប្រអប់ Last Name text box ។ ចុចលើ Right-click លើប្រអប់ Last Name text box ដើម្បីមើល pop-up menu ។

17. ចុចលើ Right-click គ្រប់កន្លែងនៅលើ form ។ ពីព្រោះវា First Name និង Last Name text boxes ដែលមាន pop-up menus។

18. បិទ form ទាំងអស់ ។

សរសេរ saveMemberClick

  1. បង្ហាញ MemberForm ក្នុងសន្លឹក Design View ចុចលើ File menu រួច ហើយចុចលើ Save Member។
  2. ក្នុងសន្លឹក Properties ចុចលើប៊ូតុង Events ជ្រើសរើសចុចលើ event វាយសរសេរ saveMemberClick រួចហើយចុចលើ Enter។
  3. ក្នុង Code និង Text Editor ទាញទៅខាងលើ MemberForm.cs file សរសេរ code:

using System.IO;

  1. ត្រឡប់ចូល saveMemberClick នៅចុងបញ្ចប់សរសេរ MemberForm.cs file

writer.WriteLine(“First Name: ” + firstName.Text);

writer.WriteLine(“Last Name: ” + lastName.Text);

writer.WriteLine(“Tower: ” + towerNames.Text);

writer.WriteLine(“Captain: ” + isCaptain.Checked);

writer.WriteLine(“Member Since: ” + memberSince.Text);

writer.WriteLine(“Methods: “);

foreach(object methodChecked in methods.CheckedItems) {

writer.WriteLine(methodChecked.ToString());

}

writer.Close();

MessageBox.Show(“Member details saved”, “Saved”);

 

មេរៀនទី១៧: Performing Validation

មេរៀនទី១៧: Performing Validation

ក្នុងជំពូកនេះនឹងរៀនពីរបៀបធ្វើ:

– ពិនិត្យពីការបញ្ចូលព៌តមានដោយ user មួយកំណត់ច្បាស់ថាវាមិន បំពានកម្មវិធីប្រើប្រាស់ឬតួនាទី business ។

-ប្រើ CausesValidation property និង validation eventនៃ forms និង control។

– ប្រើ ErrorProvider control សំរាប់រាយការណ៍ប្រាប់ពី error message។

1. Validating Data

គំនិតនៃការបញ្ចូល input validation គឺជាការងាយប៉ុន្តែវា ប៉ុន្តែវាមិន មែនជាការងាយស្រួលដើម្បីអនុវត្ត លក្ខណ:ពិសេសនៃ validation ជាប់ទាក់

ទងនិងទិន្នន័យ data ដែលអ្នកប្រើប្រាស់បានបញ្ចូលទៅក្នុងពីរឬច្រើន control ដែលស្ថិតនៅក្រោមតួនាទី business អាចទំនាក់ទំនងត្រង់ផ្ទាល់ ។

2. ឧទាហរណ៍ពី Customer Maintenance

អ្នកបានស្នើរទាមទារដើម្បីសង់ build កម្មវិធីប្រើប្រាស់ Customer Maintenance មួយ ។ ផ្នែកនៃកម្មវិធីប្រើប្រាស់ត្រូវការដើម្បីបញ្ចូលសារ:សំខាន់ ពិស្តារនៃ customer មួយដែលរួមមានចំណងជើង ឈ្មោះ និងភេទ ។ អ្នកសំរេចចិត្តដើម្បីបង្កើត form ដូចដែលបង្ហាញខាងក្រោមនេះ ។
aឧទាហរណ៍នេះគឺជា Multiple Document Interface (MDI) កម្មវិធីប្រើប្រាស់ដែលមានរួចស្រេចនៃ frame មួយកន្លែងនៃ forms ផ្សេងទៀត ដែលអាចមើលឃើញ ។

សំដែង Validation ជាមួយ Sledge Hammer ក្នុងលំហាត់ខាងក្រោមនេះ អ្នកនឹងពិនិត្យកម្មវិធីប្រើប្រាស់ Customer Maintenance ហើយរត់ដំណើរការវាដើម្បីមើលភាពងាយស្រួល អ្នកអាចទទួល កំហុស validation ។

ពិនិត្យមើលកម្មវិធី

1. បើក CustomerDetails project ដែលមានទីតាំងក្នុង\Microsoft Press\Visual C# Step By Step\Chapter 16\CustomerDetails folder ក្នុង My Documents folder របស់អ្នក ។

2. ក្នុង Solution Explorer ចុចពីរដងលើ double-click CustomerForm.cs ដើម្បីមើលពិស្តារ Customer Detail form ក្នុង Design View។

3. ចុចលើប្រអប់ Title list box នៅលើ form រួចចុចលើ Items property ក្នុងសន្លឹក Properties ។
aអ្នកអាចមើលពីក្នុងការប្រមូលផ្តុំដែលមានផ្ទុក list box គឺមានបួន titles: Mr, Mrs, Miss និង Ms ។ ចុចលើ Cancel ដើម្បីបិទសន្លឹក String Collection Editor ។

4. ពិនិត្យមើលប្រអប់ Gender group box និងប៊ូតុង radio ។ ក្នុង

ប្រអប់ group box ផ្ទុកប៊ូតុង radio ដែលហៅថា Male និង Female ។

មានការអនុវត្តន៍នៃ Validating event សំរាប់ Title list box និងប្រអប់ Gender group box ។ វាទាំងពីរដែលហៅថា checkTitleAndGender method រួចហើយបង្កើត Cancel property នៃ CancelEventArgs parameter គឺជា true ប្រសិនបើ checkTitleAndGender method ត្រឡប់ទៅ false:

5. មើលក្នុង checkTitleAndGender method ដាក់ភ្លាមៗ ទៅក្នុង event methods:

private bool checkTitleAndGender()

{

if (title.Text == “Mr”)

{

// Check that gender is Male

if (!male.Checked)

{

MessageBox.Show(“If the title is Mr the gender must be male”,

“Error”,

MessageBoxButtons.OK, MessageBoxIcon.Error);

return false;

}

}

else

{

// Check that the gender is Female

if (!female.Checked)

{

MessageBox.Show(“If the title is Mrs, Miss, or Ms

the gender must be female”, “Error”,

MessageBoxButtons.OK, MessageBoxIcon.Error);

return false;

}

}

// Title and gender match

return true;

}

បន្ថែម ErrorProvider control

1. ត្រឡប់ទៅក្នុង CustomerForm ក្នុងសន្លឹក Design View ។

2. ពីក្នុងប្រអប់ Toolbox ចុចលើ ErrorProvider control រួច drop វា នៅលើ form ។ វាបង្ហាញក្រោម form ។

a3. ចុចលើ errorProvider1 control រួចហើយជ្រើសរើស Properties ប្តូរ Change ឈ្មោះ (Name) property ទៅក្នុង errorProvider និងផ្ទៀងផ្ទាត់ BlinkStyle property គឺបង្កើតក្នុង BlinkIfDifferentError ។

4. នៅលើ CustomerForm ជ្រើសរើសក្នុងប្រអប់ Title list box ។ ប្រសិនបើអ្នកមើលក្នុងសន្លឹក Properties  អ្នកនឹងរកឃើញ property ថ្មីដែលហៅថា Error នៅលើ errorProvider ។
a

5. ប្តូរ Code និងសន្លឹក Text Editor សំរាប់ CustomerForm ។ ទីតាំង checkTitleAndGender method និងប្តូរ statements ដែលហៅថា MessageBox ។ បង្ហាញជាមួយ errorProvider.SetError method បង្ហាញ ដូចខាងក្រោមនេះ:

private void titleValidating(object sender,

CancelEventArgs e)

{

if (!checkTitleAndGender())

{

e.Cancel = true;

}

}

private void genderValidating(object sender, CancelEventArgs e)

{

if (!checkTitleAndGender())

{

e.Cancel = true;

}

}

តែស ErrorProvider control

1. Compile និងរត់ដំណើរការ (បញ្ចប់អថេរក្នុង \Microsoft Press\Visual C# Step By Step\Chapter 16\CustomerDetails Complete folder នៅក្នុង My Documents folder របស់អ្នក ។

2. កាលណាកម្មវិធីអនុវត្តន៍ចាប់ផ្តើមចុចលើប៊ូតុង New Customer នៅលើ toolbar Customer មើលពិស្តារ form ។

3. ជ្រើសរើស Mrs ក្នុងប្រអប់ Title list box រួចត្រួតពិនិត្យមើលផ្ទៀង ផ្ទាត់ឡើងវិញប៊ូតុង Male radio ត្រូវបានជ្រើសរើស ។

4. ចុចលើប៊ូតុង Save Customer លើ toolbar ។  message បង្ហាញ ក្នុង status bar ដែលបញ្ជាក់ថា save failed និង error icons ដែលត្រូវបានបង្ហាញឡើងបន្ទាប់ពី controls គឺជា error ។ ប្រសិនបើអ្នក ចង្អុល mouse លើ error icons នីមួយៗអ្នកឃើញ error message។

5. ជ្រើសរើសប៊ូតុង Female gender radio រួចចុចលើប៊ូតុង Save ក្នុង toolbar ម្តងទៀត ។

6. ​បញ្ចប់ Exit កម្មវិធីប្រើប្រាស់ ។

បន្ថែម ErrorProvider control

  1. ត្រឡប់ចូល CustomerForm ក្នុង Design View
  2.  ក្នុង Toolbox ពង្រីក Components category រួចចុចលើ ErrorProvider លោកអ្នកឃើញ form បង្ហាញដូចខាងក្រោមនេះ

a3. ចុចលើ errorProvider1 control រួចហើយជ្រើសរើស Properties   ប្តូរឈ្មោះ (Name) ទៅជា errorProvider និងផ្ទៀងផ្ទាត់ BlinkStyle បានបង្កើត BlinkIfDifferentError ហើយឬនៅ

4. សរសេរ Code និង Text Editor សំរាប់ CustomerForm

// Cross check the gender and the title to make sure they correspond

private bool checkTitleAndGender()

{

if (title.Text == “Mr”)

{

// Check that gender is Male

if (!male.Checked)

{

errorProvider.SetError(gender, “If the title is Mr ” +

“the gender must be male”);

errorProvider.SetError(title, “If the gender is ” +

“female the title must be Mrs, Miss, or Ms”);

return false;

}

}

else

{

// Check that the gender is Female

if (!female.Checked)

{

errorProvider.SetError(gender, “If the title is Mrs, ” +

“Miss, or Ms the gender must be female”);

errorProvider.SetError(title, “If the gender is male ” +

“the title must be Mr”);

return false;

}

}

// Title and gender match – clear any errors

errorProvider.SetError(gender, “”);

errorProvider.SetError(title, “”);

return true;

}

បង្កើត ErrorProvider control

  1. ​​​Build និងរត់ដំណើរការកម្មវិធីSelect Mrs ក្នុងប្រអប់ Title combo box រួចហើយផ្ទៀងផ្ទាត់មើល Male ដែលបានជ្រើសរើស។
  2. នៅលើ File menu ចុចលើ Save និងមានប្រអប់ message បង្ហាញ បានប្រាប់ថា save failed និង error icons។ រួចហើយចុចលើ OK។ ប្រសិនបើលោកអ្នកប្រើ mouse ចុចលើ error icon លោកអ្នកនឹង ឃើញ error message ដែលបង្ហាញទំព័រដូចខាងក្រោមនេះ

a

  1. ជ្រើសរើសភេទស្រី Female gender រួចចុចលើ Save item លើ File
  2. បញ្ចប់ Exit កម្មវិធីប្រើប្រាស់

បន្ថែម StatusStrip control

  1. ត្រឡប់ចូលក្នុង CustomerForm ក្នុងសន្លឹក Design View
  2. ក្នុង Toolbar ពង្រីកមើលលើ Menus & Toolbars រួចហើយទាញ StatusStrip control ពីក្នុង Toolbar នៅលើ form។
  3. ត្រួតពិនិត្យមើល form និង status bar ដែលត្រូវបានបន្ថែមលើ form

a

  1. ចុចលើ statusStrip1 រួចហើយជ្រើសរើស Properties
  2. ប្តូរឈ្មោះ (Name) property ទៅជា statusStrip
  3. ក្នុង status bar លើ form ចុចលើព្រួញដែលបានបង្ហាញក្នុងក្រាហ្វីច រួចហើយចុចលើ StatusLabel។
    a

    1. ចុចលើ toolStripStatusLabel1 នៅក្នុង status bar ដែលប្រើជា​សន្លឹក Properties window ប្តូរឈ្មោះទៅជា statusMessages។
    2. លោកអ្នកនឹងឃើញ បង្កើត text color ទៅជាពណ៌ខ្មៅជំហានបន្ទាប់
    3. ការផ្លាស់ប្តូរទីពីរគឺ MessageBox statement ដើម្បីបង្ហាញក្នុង error ខាងក្រោមនេះ:

    statusMessages.ForeColor = Color.Red;

    statusMessages.Text = “Customer title and gender are inconsistent. Changes

    not saved”;

មេរៀនទី១៨: ប្រើ Complex Control

មេរៀនទី១៨: ប្រើ Complex Control

ក្នុងជំពូកនេះ អ្នកនឹងរៀនធ្វើពីរបៀប:

-បង្កើត docked control

-ធ្វើជាមួយ Splitter control

-ប្រើ Panel control សំរាប់ grouping control

-ផ្ទុកព៌តមានក្នុង ImageList control

1. Explorer Interface កម្មវិធី GUI ដែលអ្នកបានសរសេរ (Middleshire Bell Ringers Association និង Customer Maintenance) ត្រូវបានរចនាមានលក្ខណ: ពិសេសមុខងារជាច្រើន វាប្រើបញ្ចូល input, display និង edit ទិន្នន័យទោល មួយក្នុងពេលមួយ (សមាជិក Middleshire District Bell Ringers Association ឬ customer) ។ អ្នកប្រើប្រាស់តែងតែចង់បាននិងស្រាវជ្រាវឆ្លងកាត់ទិន្នន័យនិង display record មួយឬច្រើនក្នុងពេលមួយ ។
a2. ធ្វើការជាមួយ Splitter និង Docked Control

ក្នុងលំហាត់បន្ទាប់នេះ អ្នកនឹងបង្កើតតែសកម្មវិធីប្រើប្រាស់ test ដើម្បី បង្ហាញពីរបៀបធ្វើ Splitter control និងពន្យល់បន្ថែមអំពី Dock property នៃ controls ។ បង្កើត docked control

1. ប្រើ Microsoft Visual Studio .NET បង្កើត Visual C# project ថ្មី ដែលប្រើ Windows Application template ។ ហៅវា SplitterDemo និង

រក្សា save ក្នុង \Microsoft Press\Visual C# Step By Step\Chapter 17 folder ក្នុង My Documents folder របស់អ្នក ។

2. បង្កើតច្បាស់លាស់ Form1 ត្រូវបាន Design View ។ ប្រើប្រាស់ Toolbox ទាញ CheckedListBox control ពីខាងឆ្វេងដៃនៃ Form1 ។

3. ក្នុងសន្លឹក Properties window ជ្រើសរើស Items property រួចចុចលើប៊ូតុង Ellipses ។ កាលណា String Collection Editor បើកវាយ សរសេរ strings ដែលជាកម្មសិទ្ធិរបស់អ្នក (ឧទាហរណ៍ ប្រើឈ្មោះរបស់អ្នក ដូចជា Teav Chhun Nan ) រួចចុចលើ OK ។

4. ជាមួយ checkedListBox1 control នៅតែជ្រើសរើស កន្លែង Dock property ក្នុងសន្លឹក Properties ។

5. ចុចលើ panel ខាងឆ្វេងដៃក្នុង diagram ដើម្បីបង្ហាញថាអ្នកនឹងត្រូវការដើម្បី dock ខាងឆ្វេងដៃ checkedListBox1 control ទៅក្នុង form ។
a6. ក្នុងប្រអប់ Toolbox ទាញ TextBox control ទៅក្នុងតំបន់នៅខាង ស្តាំដៃនៃ form ។ ក្នុងសន្លឹក Properties បង្កើត Multiline property ទៅ True ។

7. ជាមួយ textBox1 control ដែលបានជ្រើសរើស ចុចលើបន្ទាត់ property ក្នុងសន្លឹក Properties និងចុចលើប៊ូតុង Ellipse ។ កាលណា Strings Collection Editor បានបើកវាយសរសេរ ក្នុង text នៃកម្មសិទ្ធិរបស់ អ្នកនឹងចុចលើ OK ។

8. ក្នុងសន្លឹក Properties បង្កើត Dock property សំរាប់ textBox1 បំពេញដោយចុចលើកណ្តាលតំបន់នៃ diagram ។

បន្ថែម Splitter control

1. ក្នុងប្រអប់ Toolbox ទាញ Splitter control និង drop វាលើ form
asplitter automatically ទីតាំងរបស់វារវាង checkedListBox1 និង textBox1 ដែលបានបង្ហាញ ។
2. ដើម្បីបង្កើត splitter ដែលមាន visible ច្រើនបង្កើត BackColor property របស់វាគឺពណ៌ក្រហម ។ ប្រសិនបើមានបញ្ហាដែលបានជ្រើសរើស Splitter control លើ form ជ្រើសរើស control (splitter1) ពីក្នុងប្រអប់ combo box ក្នុងសន្លឹក Properties ។

3. នៅលើ Debug menu ចុចលើ Start ទៅក្នុង compile រួចរត់

ដំណើរការ form ។ កាលណា form រត់ដំណើរការ ទីតាំង mouse pointer លើ splitter bar ពណ៌ក្រហម ។

4. ទាញ splitter cursor ទៅខាងឆ្វេងនិងស្តាំដៃ។ កត់ចំណាំថា ជ្រើសរើស list box ត្រូវបានកែទំហំឡើងវិញ។
a

3. សង់ Build និងរត់ដំណើរការកម្មវិធីប្រើប្រាស់ ។ កាលណា form បង្ហាញ ទាញ splitter bar ទៅខាងស្តាំដៃ ចាំថា button និង check box គឺមិនមានឥទ្ធិពលវាមិនអាចប្តូរបាន ។

4. បិទ form រួចត្រឡប់ទៅក្នុងកម្មវិធី Visual Studio .NET។

5. បិទ form រួចត្រឡប់ទៅ Visual Studio .NET ។

 

មេរៀនទី១៩:ប្រើ MDI និង Dialog Box

មេរៀនទី១៩:ប្រើ MDI និង Dialog Box

បង្កើត multiple document interface (MDI) គឺជា form មេនិងកូន

-បង្ហាញ Dynamically និងលាក់ form។

-Merge menu នៅលើ form មេនិងកូន ។

– របៀបចំ forms កូននៅលើ form មេ ។

– បង្កើតម៉ូតប្រអប់ dialog box និង form

-បន្ថែមប្រអប់រួម common dialog boxទៅក្នុងកម្មវិធីប្រើប្រាស់ ដែលជាកម្មសិទ្ធិរបស់អ្នក ដោយប្រើប្រអប់ common dialog control។

1. អ្វីដែលហៅថា MDI​ ? ការអនុវត្តន៍ដែលប្រើ MDI អនុញ្ញាតអោយអ្នកមើលឯកសារជាច្រើន ក្នុងពេលតែមួយ ។ ឯកសារនីមួយៗត្រូវបានបង្ហាញក្នុងសន្លឹកដែលជាកម្មសិទ្ធិ ដែលយោងទៅតាម សន្លឹកកូន ។ សន្លឹកកូនត្រូវបានបង្ហាញ នៅក្នុងដែលលោត ឡើងលើសន្លឹក MDI ក្នុងផ្នែកនៃសន្លឹកដែល ហៅ ថាតំបន់ MDI client ។ MDI frame ដែលផ្ទុក menu bar, status bar និង toolbar សំរាប់កម្មវិធីប្រើប្រាស់ menus ដែលជាកម្មសិទ្ធិ form កូនត្រូវបានបង្ហាញក្នុង MDI frame ។ ប្រសិនបើអ្នកប្រើប្រាស់ user ប្តូរវាងសន្លឹកកូន ។ menu ប្តូរទៅ menu ដែលប្រើដោយសន្លឹកកូន ។ បន្ទាប់ពីបង្ហាញការប្រើប្រាស់ MDI និងលក្ខណ: ចម្បងរបស់វា ។
aសង់កម្មវិធី MDI Application ដើម្បីជំនួយ ​អោយអ្នកយល់អំពី MDI អ្នកកំពុងបន្តទៅ build កម្មវិធី MDI កម្មវិធីប្រើប្រាស់គឺជាការងាយស្រួល text editor បន្ទាប់ពីបានបង្ហាញសន្លឹក text ជាច្រើនក្នុងពេលដូចគ្នារួចហើយ edit text ។

បង្កើត MDI form មេ ដើម្បីជំនួយអោយអ្នកយល់អំពី MDI អ្នកកំពុងសង់ build កម្មវិធីប្រើ ប្រាស់ MDI ។ កម្មវិធីប្រើប្រាស់ងាយបង្កើត text editor ដែលអនុញ្ញាតអោយ  អ្នកប្រើប្រាស់ user ដើម្បីបង្ហាញសន្លឹក text ក្នុងពេលដូចគ្នារួចហើយ edit text។

2. បង្កើត MDI form មេ

1. ក្នុងកម្មវិធីប្រើប្រាស់ Microsoft Visual Studio .NET បង្កើត project ថ្មីដែលហៅថា MDIDemo ក្នុង \Microsoft Press\Visual C# Step By Step\Chapter 18 folder ក្នុង My Documents folder របស់អ្នក ។​ ប្រើWindows Application template ។

2. ក្នុង Solution Explorer ប្តូរឈ្មោះនៃ Form1.cs file ទៅក្នុង MDIParent.cs ។ (ចុចលើ Right-click Form1.cs ក្នុង Solution Explorer រួចចុចលើ Rename នៅលើ pop-up menu)

3. មើល MDIParent.cs ក្នុង Design View ប្រសិនបើវាមិនបង្ហាញ ត្រូវជ្រើសរើសវារួចហើយបង្កើត properties របស់វាដោយប្រើតំលៃតារាងដូច ខាងក្រោមនេះ ។

4. មើល Code ប្រើ scroll ចុះក្រោមទៅក្នុង Main method រួចហើយប្តូរកម្មវិធីប្រើប្រាស់ ។ រត់ដំណើរការ statement ដែលបន្ថែម Code ដូចខាង ក្រោមនេះ (ចាំថាប្រសិនបើអ្នកប្តូរឈ្មោះនៃ main form ក្នុងកម្មវិធីប្រើ ប្រាស់អ្នកត្រូវតែ edit Main ដើម្បីប្រើឈ្មោះថ្មី):

Application.Run(new? MDIParent());

5. ត្រឡប់ Design View ក្នុង Toolbox ទាញ MainMenu control លើ form ។ ប្តូរឈ្មោះរបស់វាទៅ mdiMenu ។

6. ចុចលើ MDI form មេរួចក្នុងសន្លឹក Properties មើលអោយច្បាស់ Menu property របស់វាគឺបង្កើត mdiMenu ។

7. ប្រើ menu editor (ជ្រើសរើស mdiMenu control រួចហើយវាយ សរសេរ caption នៅលើ menu bar របស់ form) បង្កើត menu នៅខាងលើ ដែលផ្ទុក items labeled &File និង &Window ។ បង្កើតឈ្មោះរបស់វា

ទៅ fileItem និង windowItem ។ បន្ថែម submenu items ដែលមាន label &New, &Close និង E&xit ទៅ File menu ។

9. Build និងរត់ដំណើរការកម្មវិធីប្រើប្រាស់ដែលទើបតែតែសវា ។

3.  បង្កើត MDI child form

1. បន្ថែម form កូនទៅអនុវត្តដោយ ប្រើបន្ថែម Add Item ថ្មីលើ Project menu ។ កាលណាបន្ថែមប្រអប់ Item dialog box ថ្មីដែលបានបើក ចុចលើ Windows Form template រួចវាយសរសេរ MDIChild.cs ប្រអប់

ឈ្មោះ Name text box ។ ចុចបើកដើម្បីបង្កើត form និងបន្ថែមទៅ project។

2. បង្ហាញ MDIChild.cs ក្នុង Design View ។ នៅក្នុងប្រអប់ Toolbox ទាញ TextBox control លើ form ។ ប្តូរឈ្មោះនៃ textBox1 control ទៅ editData បង្កើត Dock property របស់វាដើម្បីបំពេញ (ដោយ ចុចលើតំបន់នៃ Dock diagram) បង្កើត Multiline property គឺ True រួចហើយ សំអាត់ Text property ។

3. ក្នុងប្រអប់ Toolbox ជ្រើសរើស MainMenu control រួចទាញលើ MDIChild form ។ ប្តូរឈ្មោះ menu ទៅ Menu កូន។ ប្រើ menu editor, បន្ថែម  &File item ទៅ menu។

4. ចុចលើ saveItem menu រួចបង្កើត MergeOrder property គឺ 1 កាលណា menus ត្រូវបានបញ្ចូល ។

5. ចុចលើ separator bar នៅលើ menu កូននឹងបង្កើត MergeOrder property របស់វាគឺ 1 ។ separator bar ត្រូវការបង្ហាញបន្ទាប់ពី Save menu item បានភ្ជាប់ជាមួយ menu ។

6. បង្ហាញ MDI form មេក្នុង Design View ។ ចុចលើ fileItem menu រួចហើយបង្កើត MergeType property របស់វាទៅ MergeItems ។

កាលណាអ្នកភ្ជាប់ menus មេនិងកូនត្រូវបានភ្ជាប់ទាំងពីទៅក្នុង MergeType properties បង្កើត MergeItems; ម្យ៉ាងទៀត menus នឹងមិនភ្ជាប់ត្រឹមត្រូវ ។

7. ចុចលើ newItem menu item ផ្ទៀងផ្ទាត់ថា MergeOrder property របស់វាគឺបង្កើត 0 ។ ធ្វើឈ្មោះដូច closeItem menu item ។

 ប្តូរ Merge Order property របស់ exitItem menu item គឺ 2 ដែលហៅឡើងវិញ ដែលអ្នកបានបង្កើតតំលៃ MergeOrder សំរាប់ saveItem menu លើ menu កូនគឺ 1 ។ នេះមានន័យថា Save command ត្រូវបានបង្ហាញ ។

1. នៅលើ  MDIParent form បង្កើត Click event របស់ newItem ដែលហៅថា newItemClick ដោយប្រើ Event View ក្នុងសន្លឹក Properties newItemClick event បង្ហាញក្នុង Code និងសន្លឹក Text Editor ។

2. ក្នុង newItemClick event method វាយសរសេរ code ខាងក្រោមនេះ:

MDIChild childForm = new MDIChild();

childForm.MdiParent = this;

childForm.Show();

3. Build និងរត់ដំណើរការកម្មវិធីប្រើប្រាស់ ។ កាលណា MDI form កូនបង្ហាញ នៅលើ File menu ចុចលើ New ។ form កូនបង្ហាញក្នុងតំបន់ រួចហើយអ្នកវាយសរសេរ text ។ នៅលើ File menu ចុចលើ New ម្តងទៀត form កូនផ្សេងទៀតបង្ហាញ ។ តាមពិតអ្នកបើក អ្នកអាចបើក forms កូនក្នុង ពេលតែមួយ space​ និង memory នៃកុំព្យូទ័ររបស់អ្នកដែលអនុញ្ញាត ។ប្រសិន បើអ្នកចុចលើ File menu អ្នកឃើញ Save command (និង separator bar) ប្រសិនបើអ្នកបិទ forms កូនទាំងពីរ Save item  មិនបានបង្ហាញ ។

4. នៅលើ File menu ចុចលើ Exit រួចត្រឡប់ទៅកម្មវិធី Visual Studio .NET ។

កំណត់ Window menu

1. ត្រឡប់ Design View សំរាប់ MDIParent form ។ ប្រើ menu editor ដើម្បីបន្ថែម Window menu និងកូន sub-item រួចចុចលើ event method ដែលសង្ខេបតារាងដូចខាងក្រោមនេះ។

Text Name Click event method
&Cascade cascadeItem cascadeItemClick
Tile &Horizontal horizontalItem horizontalItemClick
Tile &Vertical verticalItem verticalItemClick

a

2. ក្នុង Code និងសន្លឹក Text Editor បន្ថែម statement ទៅក្នុង body នៃ cascadeItemClick method:

this.LayoutMdi(MdiLayout.Cascade);

ក្នុង horizontalItemClick method បន្ថែម statement ខាងក្រោមនេះ:

this.LayoutMdi(MdiLayout.TileHorizontal);

ហើយនៅក្នុង verticalItemClick method បន្ថែម statement ខាងក្រោមនេះ:

this.LayoutMdi(MdiLayout.TileVertical);

3. មើល MDI form មេក្នុង Design View ម្តងទៀតរួចហើយ ជ្រើស

រើសសន្លឹក Item menu ។ ក្នុងសន្លឹក Properties បង្កើត MdiList

property គឺ True ។

4. ប្តូរ Code និងសន្លឹក Text Editor ដែលបង្ហាញ MDIParent.cs និងទីតាំង MDIParent class ។

5. បន្ថែមអថេរ int ដែលហៅថា childCount ទៅក្នុង MDIParent class ក្រោមអថេរដែលនៅជិតខាងលើនៃ class ប៉ុន្តែ MDIParent constructor ។ ចាប់ផ្តើម childCount គឺ 0:

private int childCount = 0;

6. ទីតាំង newItemClick method ដែលមានពីមុនchildForm.Show statement បន្ថែម code ដូចខាងក្រោមនេះ:

childCount++;

childForm.Text = childForm.Text + ” ” + childCount;

បង្កើតប្រអប់ Dialog Box ក្នុងលំហាត់ខាងក្រោមនេះ អ្នកនឹងឃើញពីរបៀបបង្កើតនិងបង្ហាញម៉ូដ ប្រអប់ dialog box ។

1. ក្នុង MDIDemo project នៅលើ Project menu ចុចលើ Add Windows Form ។ បន្ថែមប្រអប់ Item ថ្មី ។ ក្នុងប្រអប់ dialog box ជ្រើស

រើស Windows Form template និងក្នុងប្រអប់ឈ្មោះ Name text box វាយ សរសេរ About.cs ។ ចុចលើ Open

a

2. ក្នុងប្រអប់ Toolbox បន្ថែមពីរ label ទៅក្នុង About form ។ សំអាត Clear Text property នៃ label ទីមួយ (ដែលហៅថា label1) រួច

បង្កើត Image property របស់វាដោយចុចលើប៊ូតុង Ellipses និងជ្រើសរើស BEANY.BMP ក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 18 folder ក្នុង My Documents folder របស់អ្នក ។

3. ក្នុងប្រអប់ Toolbox ទាញប៊ូតុង Button control នៅលើ form ក្រោមពីរ label controls ។ បង្កើតឈ្មោះ (Name) property ចុចលើ ok និង បង្កើត Text property ចុចលើ OK ។
a

4. អ្នកប្រើប្រាស់ user ចុចលើប៊ូតុង OK ដើម្បីបិទ form ក្នុងពេលរត់ ។

5. នៅលើ About form ចុចលើ OK រួចហើយក្នុងសន្លឹក Properties ចុចលើប៊ូតុង Events ។ ក្នុង Click event វាយសរសេរ okClick រួចហើយចុច

លើ Enter ។ កាលណា okClick event method បានបង្ហាញ Code និងសន្លឹក Text Editor បន្ថែម statement ខាងក្រោម:

this.Close();

មើល About form

1. មើល MDIParent form ក្នុង Design View ។

2. ចុចលើ mdiMenu control ក្រោម form រួចហើយប្រើ menu editor ដើម្បីបន្ថែម item ផ្សេងទៀតទៅ menu ។ កន្លែង item ទៅខាងស្តាំដៃ នៃសន្លឹក Window item និងឈ្មោះ helpItem រួចហើយបង្កើត Text property ទៅក្នុង &Help ។ បន្ថែម sub-item ទៅ Help menu item ដែល
a3. ជ្រើសរើស aboutItem ក្នុង menu editor រួចហើយក្នុងសន្លឹក Properties window ចុចលើប៊ូតុង Events ។ ក្នុង Click event វាយសរសេរ aboutItemClick រួចចុចលើ Enter ។ កាលណា aboutItemClick event

method ត្រូវបានបង្កើតបង្ហាញក្នុង Code View សរសេរដូចខាងក្រោមនេះ:

About aboutDialog = new About();

aboutDialog.ShowDialog();

4. Build និងរត់ដំណើរការកម្មវិធី កាលណា form បង្ហាញនៅលើ Help menu ចុចលើ About MDI Demo ។ ប្រអប់ About dialog box បានបើក ។

5. ខណ:ដែលប្រអប់ About dialog box ត្រូវបានបើក ព្យាយាមជ្រើស

រើស menu items មួយក្នុង MDI form មេ ។

6. បិទ form រួចត្រឡប់ទៅកម្មវិធី Visual Studio .NET ។

ប្រើ SaveFileDialog Control ក្នុងលំហាត់ខាងក្រោម អ្នកនឹងប្រើ SaveFileDialog control ។ ក្នុងកម្មវិធីប្រើប្រាស់ MDI Demo កាលណាអ្នក ប្រើប្រាស់ edits text ក្នុងសន្លឹកកូន អ្នកប្រើប្រាស់នឹងអាចរក្សាទុក save text  file មួយ ។ អ្នកនឹងបង្ហាញ user ឈ្មោះ file ដោយប្រើ SaveFileDialog control ។

មេរៀនទី២០: ប្រើបង្កើតសមាសភាព GUI

មេរៀនទី២០: ប្រើបង្កើតសមាសភាព GUI

ក្នុងជំពូកនេះមានបង្ហាញពីរបៀប: P បង្កើត user control មួយ P បញ្ជាក់ទិន្នន័យនិងសំដែង event លើ user control មួយ។P Add បន្ថែម control មួយទៅប្រអប់ Toolbox ។P Extend មួយនៃ Microsoft .NET Framework class ដើម្បីបន្ថែមមុខងារកម្មសិទ្ធផ្ទាល់របស់អ្នក ។P Subclass ដែលមាននៅលើ user control ដោយប្រើ inheritance ។

1. សង់បង្កើត Login User Control ក្នុងលំហាត់ខាងក្រោមនេះ អ្នកនឹងបង្កើត Login user control ដែល មើលឃើញពីមុន ។ LoginControl project និង LoginTest project ក្នុង ជំពូកនេះប្រើ Windows Control Library template ។ ដែល template នេះគឺជាអថេរលើកម្មវិធី Visual Studio .NET Professional, Enterprise Developer ឬ Enterprise Architect edition ។ ដែលប្រើស្តង់ដា Standard version នៃ Visual C# .NET 2003 ។

បង្កើត Login user control

1. ក្នុងកម្មវិធី Visual Studio .NET បង្កើត project ថ្មីដែលប្រើសន្លឹក Windows Control Library template ។ ដែលហៅថា project Login Control រួចហើយបង្កើតទីតាំងដូចជា\Microsoft Press\Visual C# Step By Step\Chapter 19 ក្នុង My Documents folder របស់អ្នក ។

2. ក្នុង Solution Explorer ប្តូរឈ្មោះ filename នៃ UserControl1.cs ទៅ LoginControl.cs ។ ប្តូរទៅ Class View (នៅលើ View menu ចុចលើ Class View) រួចប្តូរឈ្មោះ UserControl1 class ទៅ Login ។

3. ប្តូរទំហំ Size property នៃ Login control គឺ 400, 300 ។

4. ក្នុងប្រអប់ Toolbox ទាញ Label control ពីនិងប្រអប់ TextBox controls ពីរនិង ErrorProvider control មួយនិងមួយទៀត Button control ដែលមាននៅលើ form ។ បង្កើត properties ដោយប្រើតំលៃតារាងដូចខាង

ក្រោមនេះ ;

Size 100, 23
Text user name label
label2 (Name) passwordLabel
Location 32, 128
Size 100, 23
Text password label
textBox1  (Name) userNameText
Location 140, 48
Size 220, 20
Text user name
textBox2  (Name) passwordText
Location 140, 128
PasswordChar *
Size 220, 20
Text password
button1  (Name) loginButton
Location 150, 220
Size 100, 36
Text Login
errorProvider1 (Name) loginError

និយមន័យ properties សំរាប់ user control

1. ក្នុង Class View ចុចលើ right-click ក្នុង Login class ចុចបន្ថែម Add រួចហើយចុចលើ Add Property នៅលើ pop-up menu ។ កាលណា C# Property Wizard បង្ហាញជ្រើសរើស String ពីក្នុងប្រភេទ Property combo box រួចហើយវាយសរសេរ UserNameLabel ក្នុងឈ្មោះ Property Name text box ។
a

2. រួចហើយ UserNameLabel property ដោយប្តូរ code ក្នុង property ដូចខាងក្រោមនេះ:

public string UserNameLabel

{

get

{

return userNameLabel.Text;

}

set

{

userNameLabel.Text = value;

}

}

 

3. បង្កើត public get/set string property ដែលហៅថា PasswordLabel ដោយប្រើមធ្យោបាយដូចគ្នា ដែលបានបង្កើត userName Label property ។ បន្ថែម code ទៅដែលបង្ហាញ Text property នៃ passwordLabel control ដូចខាងក្រោមនេះ:

public string PasswordLabel

{

get

{

return passwordLabel.Text;

}

set

{

passwordLabel.Text = value;

}

}

4. បង្កើត public get/set string ទីបីដែលហៅ LoginButtonText ។ បន្ថែម statements ដែលអនុញ្ញាត read និង write Text property ចូលក្នុង Login បាន:

public string LoginButtonText

{

get

{

return loginButton.Text;

}

set

{

loginButton.Text = value;

}

}

5. បង្កើត public write-only string មួយ ដែលហៅថា UserName សរសេរតំលៃដែលបានអនុវត្តក្នុងពេលរត់ដំណើរការ Text property នៃឈ្មោះ userNameText ។ បន្ថែម Browsable(false) ។

[Browsable(false)]

public string UserName

{

set

{

userNameText.Text = value;

}

}

6. បង្កើត write-only ផ្សេងទៀតដែលមិនមាន non-browsable public string ដែលហៅថា Password ដែលអនុញ្ញាតអោយអ្នកសរសេរ

កម្មវិធី បង្កើតតំលៃ default សំរាប់  passwordText control:

[Browsable(false)]

public string Password

{

set

{

passwordText.Text = value;

}

}

បញ្ជាក់ data និង សំដែង event

1. ត្រឡប់ចូលក្នុង Design View ដែលមើលឃើញ LoginControl.cs. ចុចលើប៊ូតុង Login រួចជ្រើសរើសសន្លឹក Properties ។ ចុចលើប៊ូតុង Events ក្នុង Click event វាយសរសេរ loginClick រួចចុចលើ Enter ។

2. ក្នុង loginClick method បន្ថែម statements ខាងក្រោមដើម្បី

បង្កើតច្បាស់លាស់ user ដែលមានពត៌មាននៅក្នុង userNameText និង passwordText controls បង្ហាញ error icon ប្រសិនបើមានករណីដូចខាង ក្រោមនេះ:

if(userNameText.Text.Length ==? 0)

{

loginError.SetError(userNameText,

“Please enter a user name”);

return;

}

if (passwordText.Text.Length == 0)

{

loginError.SetError(passwordText,

“Please enter a password”);

return;

}

3. Scroll មើលខាងលើនៃ Login class រួចបន្ថែម public event ខាងក្រោមនេះ:

public event System.EventHandler LoginSuccess;

public event System.EventHandler LoginFail;

4. ត្រឡប់ចូលក្នុង loginClick event method ។ បន្ទាប់ code ដែលបានឆែកមើលប្រអប់ Password text box បន្ថែម statements ខាង

ក្រោមបញ្ជាក់ពីឈ្មោះ user name និង password ។

if (userNameAndPasswordAreValid(userNameText.Text,

passwordText.Text))

{

if (LoginSuccess!= null)

{

LoginSuccess(this, new System.EventArgs());

}

}

else

{

if (LoginFail != null)

{

LoginFail(this, new System.EventArgs());

}

}

5. នៅលើ Build menu ចុចលើ Build Solution ដើម្បី compile project ។

2. ប្រើប្រាស់ Login User Control

លំហាត់ខាងក្រោមនេះ អ្នកនឹងបន្ថែម Login user control ដើម្បី Toolbox រួចហើយបង្កើតកម្មវិធីប្រើប្រាស់បានងាយ ។ បន្ថែម Login user control ទៅក្នុងប្រអប់ Toolbox ។

1. នៅលើ Tools menu ចុចលើ Add/Remove Toolbox Items។  ប្រអប់ Customize Toolbox dialog box បានបើកឡើង ។ អ្នកអាចប្រើប្រអប់ dialog box នេះបន្ថែមទៅ COM controls និង .NET Framework controls

(ដែលរួមមាន user controls) ទៅក្នុង toolbar ។ ចុចលើសមាសភាព.NET Framework (វាត្រូវបានជ្រើសរើស default) ។
a

2. ចុចលើ Browse រួចមើលក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 19\LoginControl\bin\Debug folder ក្នុង My Documents folder របស់អ្នក ។ ចុចលើ LoginControl.dll (user control នេះដែលអ្នកទើបតែបង្កើត) រួចចុចលើ Open ។ Login control (ក្នុង namespace LoginControl) នឹងដែលបានបន្ថែមទៅ list នៃសមាសភាព .NET Framework ។ ចុចលើ OK

3. ប្តូរ Design View ចុចលើ Toolbox រួចហើយចុចលើ General ។  ពេលនោះ Login control បង្ហាញ ។
aបង្កើតតែសកម្មវិធីប្រើប្រាស់

1. បង្កើត project ថ្មីដោយប្រើ Windows Application template ដែលហៅថា LoginTest ។ បង្កើតក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 19 folder ក្នុង My Documents folder របស់អ្នក។ ជ្រើសរើស Add To Solution radio រួចហើយចុចលើ OK ។

1. បន្ថែម Add To Solution អនុញ្ញាតអោយអ្នកមានច្រើនជាងមួយ project បើកក្នុងពេលតែមួយនៃ Microsoft Visual Studio .NET ។

2. បន្ទាប់ពីតែសកម្មវិធីប្រើប្រាស់ត្រូវបានបង្កើតចុចលើ Project menu រួចជ្រើសរើសបង្កើត StartUp Project ។ កាលណាអ្នក build និង execute កម្មវិធីប្រើប្រាស់ចុងក្រោយ ។

3. មើល Form1 ក្នុង Design View រួចហើយប្តូរទំហំ Size property គឺ 456, 360 ។

4. ក្នុងប្រអប់ Toolbox ចុចលើ General ។ អ្នកនឹងឃើញ Login control ។ ទាញ Login control លើ form ។ បង្កើតវាទីតាំង 20, 20 ។

5. ចុចលើ Form1 ក្នុង Design View រួចហើយប្តូរ BackColor property ទៅ IndianRed ។ ប្តូរ ForeColor property ទៅ LightGray ។

6. ចុចលើ Login user control (វាហៅថា login1) រួចសាកល្បងក្នុង properties របស់វានៅក្នុងសន្លឹក Properties ។ ប៊ូតុងនៅលើ Login នឹងប្តូរ ។ ប្តូរ PasswordLabel property ទៅ Password: និង UserNameLabel property ទៅឈ្មោះ Name:

login1.UserNameLabel = “Name:”;

7. ក្នុងសន្លឹក Properties ចុចលើប៊ូតុង Events ដើម្បីមើលអថេរ events សំរាប់ login1 control ។ អ្នកនឹងឃើញ LoginFail និង LoginSuccess ទាំងអស់ដែលនៅខាងមុខ events ។ រួចចុចលើ LoginFail event វាយសរសេរ loginFail រួចហើយចុចលើ Enter ។

MessageBox.Show(“Login failed”, “Fail”);

8. ត្រឡប់ចូលក្នុង Design View របស់ Form1 ជ្រើសរើសសន្លឹក Properties (ដែលបង្ហាញ events) វាយសរសេរ loginSuccess ក្នុង LoginSuccess event រួចហើយចុចលើ Enter ។ បន្ថែម statement ខាងក្រោមកាលណា loginSuccess method បង្ហាញក្នុង Code View:

MessageBox.Show(“Login succeeded”,”Success”);

9. នៅលើ Debug menu ចុចលើ Start ដើម្បី compile និងរត់ដំណើរ ការកម្មវិធីប្រើប្រាស់ LoginTest ។ កាលណា form បង្ហាញវាយសរសេរឈ្មោះ របស់អ្នកក្នុងឈ្មោះ Name text វាយសរសេរ Hello ក្នុងប្រអប់ Password text box ។
a9. កាលណាបានបញ្ចប់ បិទ form រួចត្រឡប់ទៅកម្មវិធី Visual Studio .NET។

មេរៀនទី២១: ការគ្រប់គ្រងទិន្នន័យ

មេរៀនទី២១: ការគ្រប់គ្រងទិន្នន័យ Database

ក្នុងជំពូកនេះអ្នកនឹងរៀនអំពីរបៀប: P បង្កើតការភ្ជាប់ database មួយដោយប្រើ Server Explorer ។P ទទួលទិន្នន័យមកវិញពី database និងមើលវាក្នុង graphic ក្នុងកម្ម វិធី Microsoft Visual Studio .NET ។ P បញ្ចូល update និងលុបទិន្នន័យជំនួយក្នុង database ។

1. ប្រើប្រាស់ ADO.NET Database ជាមួយនឹង .NET Microsoft បានសំរេចដើម្បី update ActiveX Data Objects (ADO) និងបានបង្កើត ADO.NET. ADO.NET ផ្ទុកបញ្ចូលការប្រើប្រាស់ ជាច្រើនលើ ADO ។ ប្រសិនមបើអ្នកមានសាខាជាមួយ ADO រួចស្រេចអ្នកនឹង ចំណាំថា object model នៃ ADO.NET ។ Microsoft បានបង្កើត Data Adapter និង DataSet class ដែលផ្គត់ផ្គង់ផ្តាច់ការអនុញ្ញាតទិន្នន័យ data និងប្រមាណវិធី ដែលមានទំហំធំ ។ លំហាត់ក្នុងជំពូកនេះអ្នកអនុញ្ញាតអោយចូល ទៅក្នុង database ដែលបានដំឡើងក្នុង Microsoft SQL Server 2000 ឬ Microsoft SQL Server 2000 Desktop ។ អ្នកអាចបង្កើត SQL Server 2000 Desktop Engine ដោយរត់ Setup.Exe រកមើលនៅក្នុង \Program Files\Microsoft Visual Studio .NET 2003\Setup\MSDE folder (ក្នុង folder នេះវាបានបង្កើតកាលណាអ្នកដំឡើងកម្មវិធី Visual Studio .NET) ។ អ្នកអាចត្រូវការដើម្បី restart កុំព្យូទ័ររបស់អ្នកឡើងវិញដើម្បីចាប់ផ្តើមសេវា SQL Server (ស្តង់ដា Standard version Visual C# .NET 2003 មិនអាចធ្វើ ការជាមួយ SQL Server 2000 ។ ប្រសិនបើអ្នកបានដំឡើង Standard version នៃ Visual C# .NET 2003 សូមដំឡើង Microsoft SQL Server 2000 Desktop Engine) ដើម្បីបង្កើត Microsoft SQL Server 2000 Desktop Engine version នៃ Northwind Traders database បើកក្នុង សន្លឹក command prompt រួចហើយចូលក្នុង \Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Samples\Setup folder ។ កម្មវិធី osql program ដែលមានទីតាំង\Program Files\Microsoft SQL Server\80\Tools\Binn; អ្នកត្រូវការ PATH command ដើម្បីបន្ថែម directory នេះទៅ computer របស់អ្នកស្រាវជ្រាវ path មុនពេលអ្នក execute command នេះ) ។
a2.  អនុញ្ញាតចូល Database អ្នកនឹងសរសេរកម្មវិធីដែលភ្ជាប់ទៅ database ដែលទទួលបានពី មាតិកាតារាង Products table រួចហើយបង្ហាញ មាតិកា contents ទាំងនោះ។ អ្នកនឹងបង្កើតបែងចែកដែលប្រើ Database Project ដើម្បីភ្ជាបទៅ Northwind database (អ្នកនឹងប្រើ project នេះទៅមើល database) ។ អ្នកនឹងបង្កើត កម្មវិធីប្រើប្រាស់ Windows Form ដែលប្រើប្រាស់ភ្ជាប់ database និងមើល ទិន្នន័យ data ។
ភ្ជាប់ជាមួយ database
1. ប្រើប្រាស់ Visual Studio .NET បង្កើត project ដែលប្រើ Database Project template។ អ្នកនឹងរកមើល template នេះក្នុង Database Projects folder ក្រោម Projects ផ្សេងទៀត ។ ឈ្មោះ project ListProducts និងរក្សាទុកវានៅក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 21 folder ក្នុង My Documents folder របស់អ្នក ។
a
2. កាលណាអ្នកបង្កើត  project ប្រអប់ Data Link dialog box បង្ហាញនិង prompts អ្នកមើលពត៌មានអំពី database ដែលភ្ជាប់ទៅ ។ ចុចលើ Provider  និងត្រួតពិនិត្យមើលកម្មវិធី Microsoft OLE DB Provider សំរាប់ SQL Server អ្នកផ្គត់ផ្គង់ត្រូវបានជ្រើសរើស ។
3. ចុចលើ Connection ជ្រើសរើស SQL Server រួចហើយ and then មើលលក្ខណ:ទូទៅរបស់ពត៌មានដែលត្រូវការដើម្បី log on ចូលទៅក្នុង server ។ ប្រសិនបើអ្នកកំពុងប្រើប្រាស់ SQL Server 2000 Desktop Engine ឈ្មោះ server name នឹង Server របស់អ្នក\VSdotNET2003 រួចហើយអ្នកនឹងជ្រើសរើសប្រើ Use Windows NT Integrated Security option; ម្យ៉ាងទៀត administrator របស់អ្នករកមើលឈ្មោះ user name និង password អ្នកនឹងប្រើ ។ បង្កើតឈ្មោះ database name ទៅ Northwind ។
a3. ប្រសិនបើអ្នកបានបង្កើត Data Link រួចស្រេចអ្នកនឹង prompt មើលជាមួយប្រអប់ Add Database Reference dialog box ជំនួសវិញ ។ ប្រអប់ dialog box នេះនឹង list គ្រប់ database ទាំងអស់ដែលអ្នកបានប្រើ។ ប្រសិនបើកើតហេតុការណ៍ ចុចលើប៊ូតុង Add New Reference ។ ប្រអប់ Data Link Properties dialog box នឹងបង្ហាញ ។

4. ចុចលើ Test Connection ដើម្បីបង្ហាញដែលអ្នកបានបញ្ចូល ពត៌មានត្រឹមត្រូវ ។ ប្រសិនបើពត៌មានគឺត្រឹមត្រូវនឹងមានប្រអប់ message box បង្ហាញ ។ ចុចលើ OK ដើម្បីបិទប្រអប់ message box ។

5. ចុចលើ OK ដើម្បីបិទប្រអប់ Data Link Properties dialog box ។ Server Explorer បង្ហាញពីការភ្ជាប់ទិន្នន័យថ្មី ។
aការភ្ជាប់ទិន្នន័យ data ត្រូវបានផ្តល់អោយឈ្មោះ YourServer \SQLExpress.Northwind.dbo។ SQL Server គឺជាអ្នកផ្គត់ផ្គង់ទៅ server
aចុចលើ Next
aចុចលើ Next បន្តទៀត
aចុចលើ Finish ដើម្បីបញ្ចប់

មើលពត៌មាន product

1. ក្នុង Server Explorer ពង្រីកការភ្ជាប់ទិន្នន័យ data connection និងពង្រីកតារាង Table folder ដែលបង្ហាញ ។ បញ្ជី list ទាំងអស់នៃតារាង ក្នុង database បង្ហាញ ។ ពង្រីកតារាង Product table និងបញ្ជី list នៃ  columns ទាំងអស់ក្នុងតារាងបង្ហាញ ។ ចុចលើ Right-click តារាង Product table រួចចុចលើ Retrieve Data ពីតារាងនៅលើ pop-up menu ។
aលទ្ធផលបង្ហាញក្នុងតារាង Product table
aតារាង Product DataTable និងបង្ហាញដូចក្នុង checkbox
aSuppliers​ Binding Navigator
aតារាង Product Data​ Table ក្នុង NorthwindDataSet.
aធ្វើការជាមួយ Data Binding និង DataSets
a2. បិទសន្លឹកដែលបង្ហាញពត៌មាន Products កាលណាអ្នកបានបញ្ចប់ browsing ។

បង្ហាញ products data ក្នុង Windows Forms application

1. ក្នុង Solution Explorer ចុចលើ right-click Solution ListProducts ។ នៅលើ pop-up menu បន្ថែម Add រួចហើយចុចលើ New Project ។ បន្ថែមប្រអប់ Add New Project dialog box ដែលបានបើក បង្កើត new project ថ្មីនិងបន្ថែមវាទៅ ListProducts ដោយ automatic ។

2. ក្នុង Project Types pane ជ្រើសរើស Visual C# Project រួច ហើយចុចលើ Windows Application ក្នុង Templates pane ។ ឈ្មោះ project DisplayProducts និងផ្ទុកវានៅក្នុង \Microsoft Press\Visual C# Step by Step\Chapter 2០ folder ក្នុង My Documents folder របស់អ្នក រួចចុចលើ OK ។  project​ ថ្មីដែលហៅថា DisplayProducts ត្រូវបានបង្កើត និង Design View នៃ Form1.cs ដែលបានបង្ហាញក្នុងសន្លឹក Design View។

3. ប្តូរឈ្មោះ Rename Form1.cs ទៅ ProductsForm.cs រួចប្តូរ ឈ្មោះនៃ Form1 class ទៅ ProductsForm ។

4. ក្នុងសន្លឹក Design View ចុចលើ form ។ ក្នុងសន្លឹក Properties ប្តូរ Text property នៃ ProductsForm ដើម្បីផលិត ។

5. បង្ហាញ Code View សំរាប់ ProductsForm ។ ក្នុង Code និង សន្លឹក Text Editor រកមើល Main method រួចហើយប្តូរ Application.Run statement ដើម្បីបង្កើតនិងបង្ហាញ ProductsForm object ដូចជា Form1:

Application.Run(new ProductsForm());

6. ត្រឡប់ Design View របស់ ProductsForm ។ ក្នុង Server Explorer ទាញតារាង Product នៅលើ form ។ កត់ចំណាំថា objects ពីនៅ ក្រោម form ដែលហៅថា sqlConnection1 និង sqlDataAdapter1 ។ ដែល sqlConnection1 object មានផ្ទុក properties ដែលលក្ខណ:ពិសេស database ភ្ជាប់ទៅវា ។ អ្នកអាចប្តូរពត៌មាននេះដោយផ្លាស់ប្តូរ Connection String property ក្នុង Properties ។

7. ជ្រើសរើស sqlDataAdapter1 control និង ពិនិត្យមើលសន្លឹក Properties ។ កត់ចំណាំថា DeleteCommand, InsertCommand, SelectCommand និង UpdateCommand properties ។  ដែល SqlCommand objects ទាំងនេះយកតាម ។
a8. ពង្រើកមើល DeleteCommand property កត់ចំណាំថា SQL DELETE statement ដែលត្រូវបានប្រតិ្តបត្តិកាលណាកម្មវិធីត្រូវការលុបទិន្នន័យ delete data ក្នុង CommandText property រួចហើយភ្ជាប់ទៅ database ក្នុងការភ្ជាប់ Connection property ។

9. ជ្រើសរើស CommandText property រួចចុចលើប៊ូតុង Ellipses ប្រអប់ Query Builder dialog box បានបើករួចបង្ហាញ SQL DELETE statement ក្នុង graphical form ជាមួយ SQL form ។

10. ចុចលើ Cancel នៅសន្លឹក Properties ខាងក្រោមកត់ចំណាំថា  មានបី hyperlinks ដែលដំឡើង Data Adapter, Generate Dataset និង Preview Data ។

11. បង្កើត Generate Dataset hyperlink ។ ប្រអប់ Generate Dataset dialog box បានបើក ។

12. ចាកចេញពីក្នុងមាតិការនៃប្រអប់ Generate Dataset dialog box បង្កើតតំលៃ default រួចចុចលើ OK ។ ដែលហៅថា dataSet11 បង្ហាញក្រោម ProductsForm ។

13. ក្នុង Toolbox ដែលជ្រើសរើស DataGrid control រួចហើយទាញ វានៅលើ ProductsForm ។

14. ប្តូរទំហំ Resize ProductsForm គឺ 812, 500 (ទទឹង ​DataGrid និងបណ្តាយ scrollbar) ។ បង្កើត Dock property នៃ dataGrid1(DataGrid

object ត្រូវបានបង្កើតនៅជំហានខាងមុខ) ។ បំពេញ DataGrid object ទៅ

ក្នុង form ។ ខណ:ដែល​​​​​​ dataGrid1 ត្រូវបានជ្រើសរើសបង្កើត DataSource property ទៅក្នុង dataSet11.Products ។

15. ប្តូរ Code និងសន្លឹក Text Editor ដែលបង្ហាញProductsForm.cs (method ដែលហៅថា ProductsForm) ។ ប្តូរ TODO comment ជាមួយ statement ខាងក្រោមនេះ:

sqlDataAdapter1.Fill(dataSet11);

16. Build និង execute កម្មវិធី កាលណា ProductsForm បង្ហាញ បំពេញ DataSet ។  DataGrid (ដែលប្រើ DataSet ដូចជាប្រភព data source) ដែលបង្ហាញមាតិការតារាង Products table ។
a

17. បិទ form និងត្រឡប់ទៅកម្មវិធី Visual Studio .NET ។

3. របៀបបន្ថែម code ទៅរក្សាទុក

1. បញ្ជាក់ ProductsForm ត្រូវបានបង្ហាញក្នុង Design View ។ ក្នុង ប្រអប់ Toolbox ទាញ MainMenu control ពីកន្លែងណាមួយទៅក្នុង form ។ control មួយថ្មីដែលហៅថា mainMenu1 បង្ហាញក្រោម form ។

2. ចុចលើ mainMenu1 ។ វាយសរសេរក្នុង caption ត្រូវបានបង្ហាញ ក្នុង menu bar នៃ ProductsForm ។ ប្រើបច្ចេកទេសបង្កើត File menu item (ដោយប្រើ caption &File) ដែលផ្ទុក submenu item  &Save និង submenu item ផ្សេងទៀត E&xit. ឈ្មោះ menu items fileItem, saveItem និង exitItem ។

a3. ក្នុង menu editor ជ្រើសរើស exitItem ។ ក្នុងសន្លឹក Properties ចុចលើ Events ជ្រើសរើសចុចលើ event វាយសរសេរ exitItemClick រួចចុច លើ Enter ។ exitItemClick method បង្ហាញក្នុង Code និងសន្លឹក Text Editor ។

4. ក្នុង Code និងសន្លឹក Text Editor បន្ថែម statement ខាងក្រោម ទៅ exitItemClick method:

this.Close();

5. ត្រឡប់ Design View និងជ្រើសរើស saveItem ក្នុង menu editor ។ ក្នុងសន្លឹក Properties ជ្រើសរើស event វាយសរសេរ saveItemClick រួចចុចលើ Enter ។ saveItemClick method បង្ហាញក្នុង Code និងសន្លឹក Text Editor ។

6. ក្នុង Code និងសន្លឹក Text Editor បន្ថែម statements ខាងក្រោម ទៅក្នុង saveItemClick method:

try

{

DataSet changedData = dataSet11.GetChanges();

if (changedData != null)

{

int numRows = sqlDataAdapter1.Update(changedData);

MessageBox.Show(“Database updated ” + numRows +

” rows successfully”, “Success”);

dataSet11.AcceptChanges();

}

else

{

MessageBox.Show(“Nothing to save”, “No changes”);

}

}

catch(Exception ex)

{

MessageBox.Show(“An error occurred updating the database: ” +

ex.Message, “Error”, MessageBoxButtons.OK,

MessageBoxIcon.Error);

dataSet11.RejectChanges();

}

7. Build និងរត់ដំណើរការ កាលណា Products form បង្ហាញប្តូរ SupplierID នៃ row ជួរដំបូងគឺ 4 ។ ប្តូរ UnitPrice នៃជួរទីពីរគឺ 50 ។ ខាងលើ ជួរទីបី row (អ្នកបានប្តូរពីជួរ row មុនរបស់វាដែលបានប្តូរត្រូវបានរក្សាទុក) រួច ហើយនៅលើ File menu ចុចលើ Save ។ អ្នកនឹងទទួលបាន Success message box ដែលបង្ហាញពីរជួរដែលត្រូវបានផ្លាស់ប្តូរ ។ ចុចលើ OK រួចបិទ ប្រអប់ message box ។

8. ចុចលើ gray selector (ដែលផ្ទុក arrow) ទៅខាងឆ្វេងនៃជួរទីបី រួចចុចលើ Delete ។ Row 3 មិនបង្ហាញមើល ។ នៅលើ File menu ចុចលើ Save ។

9. ចុចលើ OK ដើម្បីបិទប្រអប់ message box ។ ចាំថា row 3 បង្ហាញឡើងវិញក្នុង DataGrid ។

10. នៅលើ File menu ចុចលើ Exit ដើម្បីបិទកម្មវិធីប្រើប្រាស់រួច ត្រឡប់ទៅកម្មវិធី Visual Studio .NET ។

ភ្ជាប់ database

1. បង្កើត project ថ្មីដែលហៅថា ReportOrders ដែលប្រើ Console Application template ។ រក្សាទុក Save វានៅក្នុង \Microsoft Press\Visual C# Step By Step\Chapter 2០ folder ក្នុង My Documents folder របស់អ្នករួចចុចលើ OK ។

2. ក្នុង Solution Explorer ប្តូរឈ្មោះ Class1.cs ទៅក្នុង Report.cs. ក្នុងសន្លឹក Properties ប្តូរឈ្មោះ Class1 class ទៅក្នុង Report ។

3. ក្នុងប្រអប់ Code និងសន្លឹក Text Editor បន្ថែម statement ដូច ខាងក្រោមដែលប្រើ using System; statement:

using System.Data.SqlClient;

System.Data.SqlClient namespace ដែលមានផ្ទុកមាននៅក្នុង ADO.NET classes ដែលប្រើអនុញ្ញាតចូលក្នុង SQL Server ។

4. ទីតាំង Main method នៃ Report class ។ បន្ថែម try/catch ទៅក្នុង Main method ។ គ្រប់ code ទាំងអស់ដែលអ្នកសរសេរអនុញ្ញាតចូល ទៅក្នុង database ។

try

{

// You will add your code here in a moment

}

catch(Exception e)

{

Console.WriteLine(

“An? error occurred accessing the database: ” +e.Message);

}

5. ប្តូរ code ខាងក្រោមដែលភ្ជាប់ទៅ database:

SqlConnection dataConnection = new SqlConnection();

dataConnection.ConnectionString = “Integrated Security=true;” +

“Initial Catalog=Northwind;” +

“Data Source=YourServer\\VSdotNET2003”;

dataConnection.Open();