lập trình visual studio .net
DESCRIPTION
Lập trình Visual Studio .NET. GV: Phan Bá Trí Email: [email protected]. Huế, 2/2012. Chương 3: Lập trình HĐT với C#. Nội dung: 1. Giới thiệu: - Hàm dựng - Hàm hủy - Trường - Hằng - Phương thức 2. Giới thiệu - Hàm nạp chồng - Hàm ghi đè - Hàm ảo - Lớp trừu tượng - Lớp Sealed. - PowerPoint PPT PresentationTRANSCRIPT
www.themegallery.com
LOGO
Lập trình Visual Studio .NETLập trình Visual Studio .NET
GV: Phan Bá Trí
Email: [email protected]
Huế, 2/2012
Chương 3: Lập trình HĐT với C#
Nội dung:1. Giới thiệu:- Hàm dựng- Hàm hủy- Trường- Hằng- Phương thức
2. Giới thiệu- Hàm nạp chồng- Hàm ghi đè- Hàm ảo- Lớp trừu tượng- Lớp Sealed
Chương 3: Lập trình HĐT với C#
3. Thuộc tính- Các loại thuộc tính- Thuộc tính và trường- Thuộc tính và phương thức- Thuộc tính tĩnh
4. Chỉ mục- Giới thiệu- Khai báo- Chỉ mục và thuộc tính- Chỉ mục và mảng- Chỉ mục nhiều tham số
Chương 3: Lập trình HĐT với C#
5. Sự kiện- Sự kiện là gì- Sự kiện và con trỏ hàm- Khai báo sự kiện- Ví dụ
3.1 Lớp đối tượng
- Hàm dựng- Hàm hủy- Trường- Phương thức
3.1 Lớp đối tượng
Mức truy cập của biếnMức truy
cậpMô tả
public Biến hoặc phương thức có thể được truy xuất từ bất cứ nơi nào.
internalBiến hoặc phương thức chỉ có thể truy xuất trong phạm vi cùng assembly.
protectedBiến hoặc phương thức chỉ có thể truy xuất từ bên trong kiểu dữ liệu mà nó thuộc về, hoặc các kiểu dữ liệu dẫn xuất.
protectedinternal
Biến hoặc phương thức có thể được truy xuất trong phạm vi assembly hiện tại, hoặc từ các kiểu dữ liệu dẫn xuất từ kiểu dữ liệu chứa nó.
privateBiến hoặc phương thức chỉ có thể được truy xuất từ bên trong kiểu dữ liệu mà nó thuộc về.
3.1 Lớp đối tượng
a. Hàm dựng (Constructors)- Là một loại đặc biệt của phương thức trong một lớp- Được gọi khi một lớp được tạo- Thường được sử dụng để khởi tạo các giá trị trong một lớp- Tên trùng với tên lớp- Không trả về giá trị- Nếu không tạo ra hàm dựng C# sẽ tạo ra hàm dựng ngầm định- Một lớp có thể có nhiều hàm dựng nhưng khác nhau về số lượng hoặc kiểu của tham số
Ví dụ:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace ArrayList_Bt1
{
static class Program
{
[STAThread]
static void Main()
{
Person p1 = new Person("Nguyen Hoang Ha");
p1.SayName();
Person p2 = new Person("Hoang Ha","112 Thien Thai ");
p2.SayName();
}
Ví dụ:
public class Person { string HoTen, DiaChi = "Nguyen Hue"; public Person(string HoTen) { this.HoTen = HoTen; } public Person(string HoTen, string DiaChi) { this.HoTen = HoTen; this.DiaChi = DiaChi; } public void SayName() { Console.WriteLine("Ho ten: {0}, dia chi: {1}", HoTen, DiaChi); } } }}
3.1 Lớp đối tượng
a.1 Private Constructors- Được sử dụng khi một lớp chỉ có các thành viên tĩnh và lớp không cần phải tạo ra.
3.1 Lớp đối tượng
Ví dụ:using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace ArrayList_Bt1
{
static class Program
{
[STAThread]
static void Main()
{
Console.WriteLine(MatConsants.pi);
}
3.1 Lớp đối tượng
class MatConsants
{
public static double pi = 3.14;
private MatConsants()
{
}
}
}
}
3.1 Lớp đối tượng
a.2 Static Constructors- Được gọi tự động (chỉ một lần) trước khi thực thể đầu tiên của đối tượng được tạo hoặc các thành viên tĩnh được tham chiếu.- Không có tham số
3.1 Lớp đối tượng
b Hàm hủy (Destructor)- Destructor trong C# được gọi là bộ thu gom rác Garbage Collectors.- Bộ thu gom rác sẽ giải phóng bộ nhớ khi đối tượng không còn yêu cầu hoặc tham chiếu.- Destructor khai báo như sau:
~ <tên hàm hủy>(){
// Câu lệnh;}
3.1 Lớp đối tượng
c. Trường (Fileds)- Lưu trữ giá trị- Cú pháp: <mức truy cập> <kiểu> <tên trường>- Mức truy cập: public, private, protected, internal, protected internal- Kiểu:
+ Kiểu giá trị được định nghĩa sẵn(int, char,…)
+ Kiểu tham chiếu: lớp, struct, mảng, chuỗi,…
Ví dụ:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace ArrayList_Bt1
{
static class Program
{
[STAThread]
static void Main()
{
SinhVien sv = new SinhVien();
sv.HoTen = "Nguyen Van Trung";
sv.DsDiem[0] = 5;
DateTime.Parse("03/02/2012");
Console.WriteLine(sv.HoTen);
Console.WriteLine(sv.DsDiem[0]);
sv.HienThi();
}
public class SinhVien
{
public string HoTen;
internal bool GioiTinh;
protected DateTime NgaySinh;
internal float[] DsDiem = new float[100];
public void HienThi()
{
SinhVien sv1 = new SinhVien();
sv1.NgaySinh =DateTime.Parse("3/3/99");
Console.WriteLine(sv1.NgaySinh);
}
}
}
}
3.1 Lớp đối tượng
Trường tĩnh- Được khai báo trong một lớp- Khi sử dụng không cần phải tạo ra lớp chứa trường tĩnh- Khi khai báo chỉ cần dùng static trước tên biến- Truy xuất: <Tên lớp>.tên trường tĩnh
Ví dụ trường tĩnh
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace ArrayList_Bt1
{
static class Program
{
class Test
{
[STAThread]
static void Main()
{
Console.WriteLine(List.Dem);
List lt1 = new List();
Console.WriteLine(List.Dem);
List lt2 = new List();
Console.WriteLine(List.Dem);
}
}
public class List
{
public static int Dem = 0;
public List()// Hàm dựng được gọi khi khởi tạo
{
Dem ++;
}
}
}
}
3.1 Lớp đối tượng
d. Hằng (Constants)- Khai báo hàm dùng bổ từ const- Không thể thay đổi giá trị của hằng- Hằng sử dụng như trường tĩnh
Ví dụ về hằng
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace ArrayList_Bt1
{
static class Program
{
class Test
{
[STAThread]
static void Main()
{
Console.WriteLine("Male {0}",Gender.male);
Console.WriteLine("Female {0}", Gender.female);
}
}
public class Gender
{
public const int male = 1;
public const int female = 0;
}
}
}
3.1 Lớp đối tượng
e. Phương thức (Method)- Là nơi tập hợp các câu lệnh- Được khai báo trong lớp hoặc cấu trúc, phải chỉ rõ mức truy cập, tên, kiểu trả về, danh sách các tham số. Nếu không có tham số phải có dấu ngoặc đơn ()- Phương thức không trả về giá trị có kiểu khai báo là void- Dùng return trong trường hợp phương thức có giá trị trả về
Ví dụ về phương thức
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace ArrayList_Bt1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Human hm = new Human("Nguyen Thom");
hm.SayName();
}
public class Human
{
public void SayName()
{
Console.WriteLine("My name is {0}", name);
}
string name;
public Human(string name)
{
this.name = name;
}
}
}
}
3.2 Hàm
Giới thiệu về kế thừa:- C# chỉ hỗ trợ đơn kế thừa, tức là một lớp chỉ có thể kế thừa nhiều nhất là từ một lớp cha- Lớp cơ sở nhất trong C# là lớp System.Object- Cú pháp khai báo:
class LopCon:LopCha{
Cài đặt lớp con}
Ví dụ về kế thừa
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace KeThua
{
static class Program
{
class Test
{
[STAThread]
static void Main()
{
Person p1 = new Person("Harry Potter");
p1.SayName();
Employee p2 = new Employee ("Nguyen Hoang Hue");
p2.SayName();
}
}
public class Person
{
protected string Name;
public Person(string Name)
{
this.Name = Name;
}
public void SayName()
{
Console.WriteLine("Person has Name is {0}", Name);
}
}
public class Employee : Person
{
public Employee(string Name)
: base(Name)
{ }
}
}
}
3.2 Hàm
- Person là lớp cơ sở (Lớp cha)- Employee là lớp dẫn xuất (lớp con) từ lớp Person, vì thế:
+ Nó kế thừa tất cả các dữ liệu và hàm thành viên của lớp cha (trừ private)
+ Constructors không tự động kế thừa lên lớp cha, do đó người sử dụng phải chỉ rõ:public Employee (string Name): base (Name) {}
Lưu ý: Có thể sử dụng ClassDiagram.cd để thiết kế cho 2 lớp trên
Ví dụ về kế thừa
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace KeThua
{
static class Program
{
class Test
{
[STAThread]
static void Main()
{
Employee e = new Employee ();
e.SayName();
}
}
public class Person
{
protected string Name=“NguyenHoangHa”;
public viturual void SayName()
{
Console.WriteLine("Person has Name {0}", Name);
}
}
public class Employee : Person
{
double Salary=3500000;
public override void SayName()
{ base.SayName();
Console.WriteLine("Salary is {0}", Salary);
}
}
3.2 Hàm
a. Hàm nạp chồng (Overloading) - Hàm nạp chồng là hàm trùng tên trong một lớp nhưng khác nhau về số lượng và kiểu của các tham số.- Không nạp chồng dựa vào tên tham số và kiểu trả về của các tham số
Ví dụ về nạp chồng
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Overload
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
TinhDienTich tdt = new TinhDienTich();
Console.WriteLine("Dien tich hinh tron {0}", tdt.DT(3));
Console.WriteLine("Dien tich hinh chu nhat {0}", tdt.DT(3, 4));
Console.WriteLine("Dien tich tam giac {0}", tdt.DT(3, 4, 5));
}
class TinhDienTich
{
public double DT(double r)
{
return Math.PI*r*r;
}
public double DT(double a, double b)
{
return a * b;
}
public double DT(double a, double b, double c)
{
double p = (a + b + c) / 2;
return Math.Sqrt(p*(p - a)*(p - b) * (p - c));
}
}
}
}
3.2 Hàm
b. Hàm ghi đè (Overriding) - Hàm ghi đè là hàm giống nhau trên cả lớp cha và lớp con- Để ghi đè một hàm đã có trên lớp cha:
+ Khai báo một hàm mới trong lớp con với tên giống với lớp cha
+ Sử dụng từ new
Ví dụ về ghi đè
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace GhiDe
{
static class Program
{
class Test
{
[STAThread]
static void Main()
{
Employee e = new Employee (“Bill Gate”);
e.SayName();
}
}
public class Person
{
protected string Name;
public Person(string Name)
{
this.Name = Name;
}
public void SayName()
{
Console.WriteLine(“My name is {0}", Name);
}
}
public class Employee : Person
{
public Employee(string Name):base (Name) {}
public new void SayName()
{ base.SayName();
Console.WriteLine(“Empoyee name is {0}", Name);
}
}
That’s all