PDA

View Full Version : سوال: روش نوشتن متدهای چند مرحله ای در کلاس



morika
چهارشنبه 24 آبان 1391, 16:31 عصر
سلام
وقتی متدها رو تو کلاس می نویسیم میشه به این صورت فراخوانیشون کرد:
()class cs = new class
cs.method1
حالا من میخوا ببینم این متدها که چندتا . میگیرن چجوری نوشته میشن مثلا:
cs.method1.method2.method3
حتما تو کلاسهای خود VS هم دیدین. مثلا کلاس DateTime که خیلی از این مرحله ها داره
ممنون

ali.bahrami
چهارشنبه 24 آبان 1391, 17:21 عصر
دوست عزیز متدها را به این صورت نمیشه نوشت. اینها همه کلاس هستند که درون کلاس اصلی نوشته شده اند.
یک کلاس میتونه از چندین متد و چندین کلاس دیگه تشکیل بشه که اون کلاس ها دوباره میتونند متد داشته باشند.

morika
چهارشنبه 24 آبان 1391, 18:14 عصر
خب راستش من هرچی سعی کردم نتونستم یه چیزی مثل این بنویسم. میشه یه نمونه کد بزارین؟
DateTime dt = new DateTime();
dt.Date.TimeOfDay.Days.ToString();
ممنون

مهرداد صفا
چهارشنبه 24 آبان 1391, 20:01 عصر
سلام
خوب هر کلاس میتواند دارای متود و خصوصیت باشد.
هر خصوصیت میتواند یک شی از یک کلاس باشد که مسلما خود دارای متود و خصوصیات دیگریست. برای نمونه:

//in the name of god
//اللهم صل علی محمد و آل محمد
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
class Sounds
{
public static Sound Chimes
{
get
{
return new Sound(@"c:\windows\media\chimes.wav");
}
}
}
class Sound
{
public string FileName { get; set; }
private System.Media.SoundPlayer _player;
public Sound(string file){


this.FileName = file;
_player = new System.Media.SoundPlayer(FileName);
}
public void Play()
{
_player.Play();
}
~Sound()
{
_player.Dispose();
}
}
}
//......
//در زمان استفاده
Sounds.Chimes.Play();
MessageBox.Show(Sounds.Chimes.FileName.Substring(S ounds.Chimes.FileName.LastIndexOf(@"\")+1));

morika
جمعه 29 دی 1391, 20:13 عصر
دوستان کسی می تونه یه ذره بیشتر توضیح بده این قضیه رو. راستش من نفهمیدم چجوری شد.

gwbasic
جمعه 29 دی 1391, 21:13 عصر
مرسی از کنجکاوی و سوال خوبتون!

به این روش نوشتن زنجیر وار متدها fluent api یا fluent inteface‌ می گن یه راه ساده برای پیاده سازی این روش اینه که هر متد در یک کلاس، خروجیش از جنس همون کلاس باشه


public class Person
{
public string firstName;
public string lastName;
public Person FirstName(string firstname)
{
this.firstName = firstname;
return this;
}
public Person LastName(string lastname)
{
this.lastName = lastname;
return this;
}
}
Person person = new Person().FirstName("Mohsen").LastName("Jamshidi");
MessageBox.Show(person.firstName);


برای توضیحات بیشتر به این لینک (http://randypatterson.com/2007/09/how-to-design-a-fluent-interface/) مراجعه کنید