نمایش نتایج 1 تا 18 از 18

نام تاپیک: interface های مهم در C#‎‎‎‎‎‎‎‎‎

  1. #1
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    interface های مهم در C#‎‎‎‎‎‎‎‎‎‎‎‎‎

    سلام دوستان خوب من،
    راستش از یک طرف احساس می کنم interface ها ابزارهای مهمی در برنامه نویسی C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎ هستند(عذر می خوام اگر C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ و دات نت رو از هم تفکیک نمی کنم) و دونستن اونا دید ما رو نسبت به C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎ خیلی تغییر میده. ولی در آموزش اونا کوتاهی میشه. خیلی وقت ها دوستان خیلی از مثال های حرفه یی رو متوجه نمیشند و دلیلش اینه که اونا پر از interface هستند اما دوستان از این interface ها سر در نمیارند. حذف interface از C#‎‎‎‎‎‎‎‎‎‎‎‎‎ یعنی حذف بخش عمده یی از این زبان.
    خیلی وقت ها کاستی های زیادی وجود داره اما خودمون رومون نمیشه اونا رو مطرح کنیم. من احساس کردم از interface ها زیاد خوشم نمیاد. اما یک مدت هست که به این نتیجه رسیدم که وقتی از مطلبی خوشمون نمیاد به جای فرار از اون بهتره که باهاش رو به رو شد و عمدا به طرفش رفت. تا حالا خیلی مطالب رو هدف گرفتم و یکی از اونا interface هاست. احساس می کنم که این وب سایت هم در زمینه ی interface ضعیف هست. چه در مورد خود مفهوم interface و چه در مورد interface های مهم و رایج در C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎ . برای همین تصمیم گرفتم روی interface ها تمرکز کنم همه ی مطالب پراکنده رو یک جا جمع کنم و برای این کار نیاز به کمک دیگر دوستان هم هست. مسلما خودم هم در تاپیک خیلی چیزها یاد خواهم گرفت و امیدوارم برای ارتقای سطح علمی دوستان در زمینه ی interface ، تاپیک خوبی باشه.

    پس این تاپیک رو فقط به آموزش interface های مهم C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎ نسبت میدیم.
    گاهی از مثال های MSDN استفاده می کنیم. اگه کسی مثال بهتری سراغ داره به ما خبر بده.
    من پست های مختلفی را اضافه می کنم و به اونا لینک میدم. اگه شما هم پست های خوبی بگذارید و به اونا لینک بدیم خیلی عالی میشه. پس هر پست مفیدی را هر جا سراغ دارید به من اطلاع بدید که لینکش رو اضافه کنم.
    نظرات و پیشنهادات خودتون رو برای بهتر شدن تاپیک سراپا گوشم.
    اول لیست اولیه موارد را قرار میدم بعد یکم یکم جای خالی اونا رو پر می کنم. همچنین موارد جدید رو هم اضافه می کنم.
    یادمون باشه که فقط interface های مهم رو بررسی کنیم و نه اینکه دیکشنری وار به تمام interface های C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ نگاه کنیم.

    امیدورام interface ها رو به دید دوستان صمیمی نگاه کنید!


    • interface چیست؟
      برخی لینک ها:

    اینها نظرات دوستان هستند که من در اینجا لینکشون رو قرار می دهم:
    آخرین ویرایش به وسیله cardano7 : یک شنبه 09 آبان 1389 در 04:51 صبح

  2. #2
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    IComparable

    System.IComparable
    این interface شما رو موظف می کنه که یک متد به نام CompareTo به کلاستون اضافه کنید.
            public int CompareTo(object obj)
    {
    ....
    }


    با این متد میشه همیشه دو شی از اون کلاس رو با هم مقایسه کرد.
    وجود چنین متدی برای انجام بسیاری از عملیات همچون sort کردن، کاملا حیاتی است.

    اگر من کلاس خودم را این چنین تعریف کنم:
        public class myClass : IComparable
    {
    ...

    public int CompareTo(object obj)
    {
    ....
    }
    }


    و بعد یک Collection از اون را بسازم:
    ArrayList<myClass> myInstance = new ArrayList<myClass>();


    حالا می تونم برای مرتب سازی اون Collection متد Sort را صدا بزنم.
    این روش برای Array و ArrayList و List کار میده.

    اینجاست که آدم به زیبایی interface ها پی می بره.

    این هم نمونه مثال خود MSDN هست(هرچند به نظر می تونست بهتر از اینها هم باشه):


    using System;
    using System.Collections;

    public class Temperature : IComparable
    {
    // The temperature value
    protected double temperatureF;

    public int CompareTo(object obj) {
    Temperature otherTemperature = obj as Temperature;
    if (otherTemperature != null)
    return this.temperatureF.CompareTo(otherTemperature.tempe ratureF);
    else
    throw new ArgumentException("Object is not a Temperature");
    }

    public double Fahrenheit
    {
    get
    {
    return this.temperatureF;
    }
    set {
    this.temperatureF = value;
    }
    }

    public double Celsius
    {
    get
    {
    return (this.temperatureF - 32) * (5.0/9);
    }
    set
    {
    this.temperatureF = (value * 9.0/5) + 32;
    }
    }
    }

    public class CompareTemperatures
    {
    public static void Main()
    {
    ArrayList temperatures = new ArrayList();
    // Initialize random number generator.
    Random rnd = new Random();

    // Generate 10 temperatures between 0 and 100 randomly.
    for (int ctr = 1; ctr <= 10; ctr++)
    {
    int degrees = rnd.Next(0, 100);
    Temperature temp = new Temperature();
    temp.Fahrenheit = degrees;
    temperatures.Add(temp);
    }

    // Sort ArrayList.
    temperatures.Sort();

    foreach (Temperature temp in temperatures)
    Console.WriteLine(temp.Fahrenheit);

    }
    }
    // The example displays the following output to the console (individual
    // values may vary because they are randomly generated):
    // 2
    // 7
    // 16
    // 17
    // 31
    // 37
    // 58
    // 66
    // 72
    // 95

  3. #3
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    IDisposable

    System.IDisposable
    این interface شما رو موظف می کنه که یک متد به نام Dispose به کلاستون اضافه کنید.
            public void Dispose()
    {
    ....
    }


    هدف از این کار release کردن unmanaged resources هست.
    اگر کلاسی این interface را پیاده سازی کنه، قابلیت این رو داره که در بلوک using به کار گرفته بشه. در غیر این صورت کامپایلر اجازه ی این کار رو نمیده.

    این دو نمونه کلاس رو نگاه کنید:
        class myClass1 : IDisposable
    {
    ...
    public void Dispose()
    {
    ...
    }
    }

    class myClass2
    {
    ...
    public void Dispose()
    {
    ...
    }
    }


    هر دو شبیه هم هستند و تنها تفاوتشون اینه که myClass2 بر خلاف myClass1 از IDisposable ارث بری نکرده.(گرچه هر دو متد Dispose را دارا هستند)
    حالا ببینیم عاقبتشون چی میشه. به هر دو using زیر نگاه کنید:

                using (myClass1 mc1 = new myClass1())
    {
    ....
    }

    using (myClass2 mc2 = new myClass2())
    {
    ...
    }


    اولی بعد از اجرا ی بلوک، متد Dispose رو صدا می زنه.
    اما دومی کارش به اینجاها نمیکشه. همون اول کامپایلر با این error متوقفش می کنه:
    type used in a using statement must be implicitly convertible to 'System.IDisposable'
    البته میشه آزادسازی دستی توسط متد Dispose را در بلوک های finally هم مشاهده کرد.

    در زیر لیستی از کلاس هایی را می بینید که این interface را پیاده سازی کرده اند. چه کلاس های دیگری را هم در اطرافتون می شناسید دارید که این interface رو پیاده سازی کرده باشند؟


    • BinaryReader
    • BinaryWriter
    • Brush
    • Component
    • Container
    • Control
    • Cursor
    • Font
    • Graphics
    • Icon
    • Image
    • Matrix
    • MessageEnumerator
    • OdbcDataReader
    • OdbcTransaction
    • OleDbDataReader
    • OleDbTransaction
    • OracleDataReader
    • OracleTransaction
    • Pen
    • Region
    • Socket
    • SqlCeCommand
    • SqlCeConnection
    • SqlCeDataReader
    • SqlCeEngine
    • SqlCeRemoteDataAccess
    • SqlCeReplication
    • SqlCeTransaction
    • SqlDataReader
    • SqlTransaction
    • Stream
    • TcpClient
    • TextReader
    • TextWriter
    • Timer
    • UdpClient
    • WebResponse



    --------------------------------------
    این هم جواب هایی که برخی از دوستان دادند:
    https://barnamenevis.org/showpo...17&postcount=6
    آخرین ویرایش به وسیله cardano7 : سه شنبه 12 مرداد 1389 در 05:04 صبح

  4. #4
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    IConvertible

    System.IConvertible
    این interface شما رو موظف می کنه که نه یک متد بلکه یک کوه متد به کلاستون اضافه کنید:
            public TypeCode GetTypeCode()

    public bool ToBoolean(IFormatProvider provider)

    public byte ToByte(IFormatProvider provider)

    public char ToChar(IFormatProvider provider)

    public DateTime ToDateTime(IFormatProvider provider)

    public decimal ToDecimal(IFormatProvider provider)

    public double ToDouble(IFormatProvider provider)

    public short ToInt16(IFormatProvider provider)

    public int ToInt32(IFormatProvider provider)

    public long ToInt64(IFormatProvider provider)

    public sbyte ToSByte(IFormatProvider provider)

    public float ToSingle(IFormatProvider provider)

    public string ToString(IFormatProvider provider)

    public object ToType(Type conversionType, IFormatProvider provider)

    public ushort ToUInt16(IFormatProvider provider)

    public uint ToUInt32(IFormatProvider provider)

    public ulong ToUInt64(IFormatProvider provider)


    در بین اونا دو تا از متدها با دیگران متفاوتند: GetTypeCode و ToType
    بقیه شبیه هم به نظر می رسند.

    هدف از این interface اینه که کلاس رو موظف کنه که برای user امکاناتی رو برای تبدیل object های ساخته شده از این کلاس رو به نوع های اولیه فراهم کنه:
    Boolean, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single, Double, Decimal, DateTime, Char, and String.

    مثلا ToInt32 وظیفه داره که شی را به نوع int، کانورت کنه.

    مزیت بارز این کار اینه که وقتی شما این interface رو پیاده سازی می کنید، اشیا از نوع کلاس شما می تونند توسط System.Convert معروف به انواع اولیه نظیر رشته و عدد و ... تبدیل بشند.

    در اینجا چون تعداد توابع زیاده فرق پیاده سازی Explicit و غیر Explicit بیشتر مشخصه.
    در ضمن از پارامتر IFormatProvider هم نترسید. اگه ازش خوشتون نمیاد نیازی نیست ازش استفده کنید. بگذارید دکوری باقی بمونه.

    هر چند مثال های MSDN همیشه خوب نیستند اما این یکی جالبه. یک کلاس ساخته که اعداد مختلط رو نگه می داره و به ما اجازه میده اون رو به نوع های مختلف Convert کنیم:
    using System;

    namespace ConsoleApplication2
    {

    /// Class that implements IConvertible
    class Complex : IConvertible
    {
    double x;
    double y;

    public Complex(double x, double y)
    {
    this.x = x;
    this.y = y;
    }

    public TypeCode GetTypeCode()
    {
    return TypeCode.Object;
    }

    bool IConvertible.ToBoolean(IFormatProvider provider)
    {
    if( (x != 0.0) || (y != 0.0) )
    return true;
    else
    return false;
    }

    double GetDoubleValue()
    {
    return Math.Sqrt(x*x + y*y);
    }

    byte IConvertible.ToByte(IFormatProvider provider)
    {
    return Convert.ToByte(GetDoubleValue());
    }

    char IConvertible.ToChar(IFormatProvider provider)
    {
    return Convert.ToChar(GetDoubleValue());
    }

    DateTime IConvertible.ToDateTime(IFormatProvider provider)
    {
    return Convert.ToDateTime(GetDoubleValue());
    }

    decimal IConvertible.ToDecimal(IFormatProvider provider)
    {
    return Convert.ToDecimal(GetDoubleValue());
    }

    double IConvertible.ToDouble(IFormatProvider provider)
    {
    return GetDoubleValue();
    }

    short IConvertible.ToInt16(IFormatProvider provider)
    {
    return Convert.ToInt16(GetDoubleValue());
    }

    int IConvertible.ToInt32(IFormatProvider provider)
    {
    return Convert.ToInt32(GetDoubleValue());
    }

    long IConvertible.ToInt64(IFormatProvider provider)
    {
    return Convert.ToInt64(GetDoubleValue());
    }

    sbyte IConvertible.ToSByte(IFormatProvider provider)
    {
    return Convert.ToSByte(GetDoubleValue());
    }

    float IConvertible.ToSingle(IFormatProvider provider)
    {
    return Convert.ToSingle(GetDoubleValue());
    }

    string IConvertible.ToString(IFormatProvider provider)
    {
    return String.Format("({0}, {1})", x, y);
    }

    object IConvertible.ToType(Type conversionType, IFormatProvider provider)
    {
    return Convert.ChangeType(GetDoubleValue(),conversionType );
    }

    ushort IConvertible.ToUInt16(IFormatProvider provider)
    {
    return Convert.ToUInt16(GetDoubleValue());
    }

    uint IConvertible.ToUInt32(IFormatProvider provider)
    {
    return Convert.ToUInt32(GetDoubleValue());
    }

    ulong IConvertible.ToUInt64(IFormatProvider provider)
    {
    return Convert.ToUInt64(GetDoubleValue());
    }

    }

    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
    static void Main(string[] args)
    {

    Complex testComplex = new Complex(4,7);

    WriteObjectInfo(testComplex);
    WriteObjectInfo(Convert.ToBoolean(testComplex));
    WriteObjectInfo(Convert.ToDecimal(testComplex));
    WriteObjectInfo(Convert.ToString(testComplex));

    }

    static void WriteObjectInfo(object testObject)
    {
    TypeCode typeCode = Type.GetTypeCode( testObject.GetType() );

    switch( typeCode )
    {
    case TypeCode.Boolean:
    Console.WriteLine("Boolean: {0}", testObject);
    break;

    case TypeCode.Double:
    Console.WriteLine("Double: {0}", testObject);
    break;

    default:
    Console.WriteLine("{0}: {1}", typeCode.ToString(), testObject);
    break;
    }
    }
    }
    }



    یک حرف هایی هم در مورد استثنائات مربوط به این interface گفته شده که حوصله ندارم ترجمه کنم. دوست داشتید به خود MSDN رجوع کنید:
    http://msdn.microsoft.com/en-us/libr...nvertible.aspx
    آخرین ویرایش به وسیله cardano7 : سه شنبه 01 تیر 1389 در 21:24 عصر

  5. #5
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    IEquatable

    System.IEquatable
    این interface شما رو موظف می کنه که یک متد به نام Equals را به کلاستون اضافه کنید. وظیفه ی این متد اینه که مقایسه کنه که آیا شی شما با شی دیگری برابر هست یا خیر. این interface ناخودآگاه ما رو به یاد اینترفیس System.IComparableمیندازه.
    مزیت این اینترفیس اینه که به دیگر کلاس ها اجازه ی جستجو کردن اعضای از جنس این کلاس را به شکل دلخواه ما میده. برخی کلاس ها مانند List یا ArrayList به واسطه ی همین
    interface در بین اعضای لیست خود جستجو می کنند. مثلا List<T>.Contains ، List<T>.IndexOf و List<T>.Remove برای جستجو به سراغ همین interface می روند.

    در زیر نمونه کدی را در این مورد مشاهده می کنید:

    public class Student:IEquatable<Student>
    {
    public string Name;
    public string Course;
    public float Score;

    public Student(string Name,string Course,float Score)
    {
    this.Name = Name;
    this.Course = Course;
    this.Score = Score;
    }

    public bool Equals(Student other)
    {
    if (this.Name == other.Name)
    return true;
    else
    return false;
    }

    public override bool Equals(object other)
    {
    if (other == null)
    return false;
    if (!(other is Student))
    throw new InvalidCastException("The argument is not a Student object.");
    else
    return Equals(other as Student);
    }

    public override int GetHashCode()
    {
    return this.Name.GetHashCode();
    }

    public static bool operator ==(Student student1, Student student2)
    {
    return student1.Equals(student2);
    }

    public static bool operator !=(Student student1, Student student2)
    {
    return (!student1.Equals(student2));
    }
    }
    این interface مسائل حاشیه ای زیاد داره.
    یکی اینکه اگه یک Equal برای کلاس خودمون ساختیم، یکی هم برای مقایسه ی کلاس خودمون با object بسازیم. دیگری تعریق operator های == و =! هست. و مسئله ی سوم تعریف GetHashCode هست به خصوص برای دیکشنری ها(<Dictionary<TKey, TValue). برای بررسی دقیق تر موضوع می تونید به MSDN مراجعه کنید:
    http://msdn.microsoft.com/en-us/library/ms131190.aspx

  6. #6
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: interface های مهم در C#‎‎‎‎‎‎‎‎‎

    در زیر لیستی از کلاس هایی را می بینید که این interface را پیاده سازی کرده اند. چه کلاس های دیگری را هم در اطرافتون می شناسید دارید که این interface رو پیاده سازی کرده باشند؟
    این فقط 30 درصدشه.
    Microsoft.Reporting.WinForms.AsyncWaitControl
    Microsoft.Reporting.WinForms.ClientGDIRenderer
    Microsoft.Reporting.WinForms.GdiContext
    Microsoft.Reporting.WinForms.LocalReport
    Microsoft.Reporting.WinForms.LocalReport+ReportRun timeSetupHandler
    Microsoft.Reporting.WinForms.ReportHierarchy
    Microsoft.Reporting.WinForms.ReportInfo
    Microsoft.SqlServer.Management.Common.SqlConnectio nInfoWithConnection
    Microsoft.SqlServer.Server.SmiConnection
    Microsoft.SqlServer.Server.SmiEventStream
    Microsoft.SqlServer.Server.SmiRecordBuffer
    Microsoft.SqlServer.Server.SmiRequestExecutor
    Microsoft.VisualBasic.FileIO.TextFieldParser
    Microsoft.Win32.RegistryKey
    System.ActivationContext
    System.Activities.Debugger.StateManager
    System.Activities.Statements.DurableTimerExtension
    System.Activities.Statements.InteropEnvironment
    System.Activities.Statements.InteropExecutor+Activ ityDefinitionResolution
    System.Activities.Statements.InteropExecutor+Reset CurrentActivity
    System.Activities.Statements.TimerTable
    System.Activities.WorkflowDataContext
    System.CodeDom.Compiler.TempFileCollection
    System.Collections.Concurrent.BlockingCollection<T >
    System.Collections.Concurrent.OrderablePartitioner <TSource>+EnumerableDropIndices<TSource>
    System.Collections.Concurrent.Partitioner+DynamicP artitionerForIEnumerable<TSource>+InternalPartitio nEnumerable<TSource>
    System.Collections.Generic.IEnumerator<T>
    System.Collections.Generic.SynchronizedReadOnlyCol lection<T>+EnumeratorAdapter<T>
    System.Collections.ObjectModel.ObservableCollectio n<T>+SimpleMonitor<T>
    System.ComponentModel.Design.DesignerTransaction
    System.ComponentModel.Design.IDesigner
    System.ComponentModel.Design.Serialization.Seriali zationStore
    System.ComponentModel.Design.ServiceContainer
    System.ComponentModel.EventHandlerList
    System.ComponentModel.IComponent
    System.ComponentModel.IContainer
    System.ComponentModel.License
    System.Data.IDataReader
    System.Data.IDbCommand
    System.Data.IDbConnection
    System.Data.IDbTransaction
    System.Data.OleDb.IDBInfoWrapper
    System.Data.OleDb.IDBPropertiesWrapper
    System.Data.OleDb.IDBSchemaRowsetWrapper
    System.Data.OleDb.IOpenRowsetWrapper
    System.Data.OleDb.ITransactionJoinWrapper
    System.Data.OleDb.OleDbConnectionInternal
    System.Data.SqlClient.SqlBulkCopy
    System.Data.SqlClient.SqlDebugContext
    System.Data.SqlClient.SqlInternalConnectionTds
    System.Data.SqlTypes.SqlStreamChars
    System.Deployment.Internal.Isolation.BLOB
    System.Deployment.Internal.Isolation.Manifest.Asse mblyReferenceDependentAssemblyEntry
    System.Deployment.Internal.Isolation.Manifest.Dire ctoryEntry
    System.Deployment.Internal.Isolation.Manifest.File Entry
    System.Deployment.Internal.Isolation.Manifest.Hash ElementEntry
    System.Deployment.Internal.Isolation.Manifest.Meta dataSectionEntry
    System.Deployment.Internal.Isolation.Manifest.MuiR esourceMapEntry
    System.Deployment.Internal.Isolation.Manifest.MuiR esourceTypeIdIntEntry
    System.Deployment.Internal.Isolation.Manifest.MuiR esourceTypeIdStringEntry
    System.Deployment.Internal.Isolation.Manifest.Regi stryKeyEntry
    System.Deployment.Internal.Isolation.Store+IPathLo ck
    System.Deployment.Internal.Isolation.StoreTransact ion
    System.Diagnostics.AsyncStreamReader
    System.Diagnostics.Eventing.EventProvider
    System.Diagnostics.Eventing.EventProviderBase
    System.Diagnostics.Eventing.EventProviderDataStrea m
    System.Diagnostics.Eventing.Reader.EventLogConfigu ration
    System.Diagnostics.Eventing.Reader.EventLogPropert ySelector
    System.Diagnostics.Eventing.Reader.EventLogReader
    System.Diagnostics.Eventing.Reader.EventLogSession
    System.Diagnostics.Eventing.Reader.EventLogWatcher
    System.Diagnostics.Eventing.Reader.EventRecord
    System.Diagnostics.Eventing.Reader.ProviderMetadat a
    System.Diagnostics.EventLogInternal
    System.Diagnostics.PerformanceData.CounterSet
    System.Diagnostics.PerformanceData.CounterSetInsta nce
    System.Diagnostics.PerformanceData.CounterSetInsta nceCounterDataSet
    System.Diagnostics.TraceListener
    System.Drawing.Brush
    System.Drawing.BufferedGraphics
    System.Drawing.BufferedGraphicsContext
    System.Drawing.Drawing2D.CustomLineCap
    System.Drawing.Drawing2D.GraphicsPath
    System.Drawing.Drawing2D.GraphicsPathIterator
    System.Drawing.Drawing2D.Matrix
    System.Drawing.Font
    System.Drawing.FontConverter+FontNameConverter
    System.Drawing.FontFamily
    System.Drawing.GraphicsContext
    System.Drawing.Icon
    System.Drawing.IDeviceContext
    System.Drawing.Image
    System.Drawing.Imaging.EncoderParameter
    System.Drawing.Imaging.EncoderParameters
    System.Drawing.Imaging.ImageAttributes
    System.Drawing.Imaging.PropertyItemInternal
    System.Drawing.Internal.WindowsRegion
    System.Drawing.Pen
    System.Drawing.Region
    System.Drawing.StringFormat
    System.Drawing.Text.FontCollection
    System.IdentityModel.Claims.WindowsClaimSet
    System.IdentityModel.Claims.X509CertificateClaimSe t
    System.IdentityModel.Claims.X509Identity
    System.IdentityModel.Policy.UnconditionalPolicy
    System.IdentityModel.Selectors.X509SecurityTokenPr ovider
    System.IdentityModel.Tokens.WindowsSecurityToken
    System.IdentityModel.Tokens.X509SecurityToken
    System.IO.BinaryReader
    System.IO.BinaryWriter
    System.IO.IsolatedStorage.IsolatedStorageFile
    System.IO.MemoryMappedFiles.MemoryMappedFile
    System.IO.MemoryMappedFiles.MemoryMappedView
    System.IO.Stream
    System.IO.TextReader
    System.IO.TextWriter
    System.IO.UnmanagedMemoryAccessor
    System.Linq.Parallel.AsynchronousChannel<T>
    System.Linq.Parallel.SortHelper<TInputOutput,TKey>
    System.Net.HttpListener
    System.Net.HttpListenerResponse
    System.Net.IWebProxyFinder
    System.Net.Mail.AlternateViewCollection
    System.Net.Mail.AttachmentBase
    System.Net.Mail.AttachmentCollection
    System.Net.Mail.LinkedResourceCollection
    System.Net.Mail.MailMessage
    System.Net.Mail.SmtpClient
    System.Net.Mime.MimePart
    System.Net.NetworkAddressChangePolled
    System.Net.ProxyChain
    System.Net.RequestContextBase
    System.Net.Sockets.Socket
    System.Net.Sockets.SocketAsyncEventArgs
    System.Net.Sockets.TcpClient
    System.Net.Sockets.UdpClient
    System.Net.TimerThread+Timer
    System.Net.TlsStream
    System.Net.WebResponse
    System.Resources.IResourceReader
    System.Resources.IResourceWriter
    System.Resources.ResourceSet
    System.Runtime.AsyncResult+TransactionSignalScope
    System.Runtime.Diagnostics.DiagnosticsEventProvide r
    System.Runtime.InputQueue<T>
    System.Runtime.InteropServices.CriticalHandle
    System.Runtime.InteropServices.SafeHandle
    System.Runtime.MemoryFailPoint
    System.Security.AccessControl.Privilege+TlsContent s
    System.Security.Cryptography.AsymmetricAlgorithm
    System.Security.Cryptography.BCryptHashAlgorithm
    System.Security.Cryptography.CapiHashAlgorithm
    System.Security.Cryptography.CngKey
    System.Security.Cryptography.DeriveBytes
    System.Security.Cryptography.ECDiffieHellmanPublic Key
    System.Security.Cryptography.ICryptoTransform
    System.Security.Cryptography.RandomNumberGenerator
    System.Security.Cryptography.SymmetricAlgorithm
    System.Security.Policy.Evidence+EvidenceLockHolder
    System.Security.Policy.Evidence+EvidenceUpgradeLoc kHolder
    System.Security.Principal.WindowsIdentity
    System.Security.Principal.WindowsImpersonationCont ext
    System.Security.SecureString
    System.Security.SecurityContext
    System.Security.SecurityContextSwitcher
    System.ServiceModel.Activation.SharedMemory
    System.ServiceModel.Administration.WbemProvider+Th readJob
    System.ServiceModel.ChannelFactory
    System.ServiceModel.Channels.AllowHelper+Registrat ionForAllow

  7. #7
    کاربر تازه وارد آواتار moharrami
    تاریخ عضویت
    مهر 1387
    محل زندگی
    زنجان
    پست
    88

    نقل قول: interface های مهم در C#‎‎‎‎‎‎‎‎‎

    به نظر من اینترفیس ها رو میشه به برگه کلید در تصحیح پاسخ نامه های چهار گزینه ای تشبیه کرد. همون هایی که مصحح میزاره رو پاسخ نامه و تند تند جواب های درست رو علامته میزنه!
    ما گاهی اشیائی داریم که از یه جنبه های شبیه هم اند ولی ذات اونها باهم فرق داره. میخوایم جدای این تفاوت ها از این شباهت استفاده کنیم بدون اینکه درگیر نوع و ساختار متفاوت این اشیا بیشم. به زبان ساده تر می خوایم برگه کلید رو روی شیء بزاریم و فقط اون چیزهایی رو که نیاز داریم ببینیم. برای این کار یه اینترفیس می نویسم و اون کلاسهایی رو که میخوایم این خصوصیت ها رو داشته باشند وارث قرار میدیم. در این شرایط این کلاس ها مجبور خواهند بود مفاد اینترفیس ما رو پیاده کنند. و ما میتونیم در یک مثلا متدی از این اینترفیس استفاده کنیم بدون اینکه برامون مهم باشه که شیء حاضر یک فرمه یا یک کلاسی که جدیدا نوشته شده و یا غیره. البته دلیل وجود و موارد استفاده اینترفیس ها بسیار بسیار بیشتر از اینه که دوستان و اساتید بحث رو بسط خواهند داد انشاءالله.

  8. #8
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: interface های مهم در C#‎‎‎‎‎‎‎‎‎‎

    نقل قول نوشته شده توسط moharrami مشاهده تاپیک
    به نظر من اینترفیس ها رو میشه به برگه کلید در تصحیح پاسخ نامه های چهار گزینه ای تشبیه کرد. همون هایی که مصحح میزاره رو پاسخ نامه و تند تند جواب های درست رو علامته میزنه!
    ما گاهی اشیائی داریم که از یه جنبه های شبیه هم اند ولی ذات اونها باهم فرق داره. میخوایم جدای این تفاوت ها از این شباهت استفاده کنیم بدون اینکه درگیر نوع و ساختار متفاوت این اشیا بیشم. به زبان ساده تر می خوایم برگه کلید رو روی شیء بزاریم و فقط اون چیزهایی رو که نیاز داریم ببینیم. برای این کار یه اینترفیس می نویسم و اون کلاسهایی رو که میخوایم این خصوصیت ها رو داشته باشند وارث قرار میدیم. در این شرایط این کلاس ها مجبور خواهند بود مفاد اینترفیس ما رو پیاده کنند. و ما میتونیم در یک مثلا متدی از این اینترفیس استفاده کنیم بدون اینکه برامون مهم باشه که شیء حاضر یک فرمه یا یک کلاسی که جدیدا نوشته شده و یا غیره. البته دلیل وجود و موارد استفاده اینترفیس ها بسیار بسیار بیشتر از اینه که دوستان و اساتید بحث رو بسط خواهند داد انشاءالله.
    0 نفر از یک نفر این پاسخ رو مفید ارزیابی کردند.
    حذف شدن این امکان کار خودم بود.کاش اون vulnerability رو پیدا نمیکردم.

  9. #9
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    IFormattable

    System.IFormattable
    این interface یکی از قشنگ ترین اینترفیس هاست. هدف از این اینترفیس اجبار کلاس به این است که برای کاربران قابلیت فرمت بندی را در متد ToString قرار دهد. البته ما معمولا بیشتر به جای اینکه این اینترفیس را روی کلاس هامون اعمال کنیم، از کلاس هایی استفاده می کنیم که زیر نظارت این اینترفیس به ما امکاناتی رو می دهند.

    این اینترفیس به چه دردی می خوره؟
    فرمت بندی متد ToString
    مثلا فرض کنید که یک کلاس داریم به نام "دما". به عنوان مثال مقدار این دما برابر صفر درجه ی سلسیوس هست. حالا می خواهیم این مقدار را به معادل string اون تبدیل کنیم. این کار دست کم به سه شکل امکان پذیر هست:

    myTemperature.ToString()

    0.00 °C (Celsius)
    273.15 K (Kelvin)
    32.00 °F (Fahrenheit)
    حالا می خواهیم که متد:
    public string ToString(string format)
    قادر به این باشه که مطابق سلیقه ی کاربر دما را به یکی از این سه صورت به رشته تبدیل کند.
    در اینجاست که از IFormattable استفاده می کنیم. و به ToString می گوییم که کدام فرمت را انتخاب کند. برای دیدن جزئیات این مثال به MSDN مراجعه کنید.

    چند مثال از موارد پرکاربرد C#‎‎‎‎ که این قابلیت را پیاده سازی می کنند:

    Enumeration Format Strings
    آیا می دانستید که در فرمت کردن enum ها کلی آزادی داریم؟


    Numeric Format Strings
    در برخی انواع عددی مانند Int32 و یا double می توان عدد را به رشته با فرمت standard یا custom تبدیل کرد:


    Date and Time Format Strings
    تاریخ و زمان را هم می توان با فرمت standard یا custom به رشته تبدیل کرد:


    در آخر باید بگم که لازم نیست که حتما یک فرمت را برای نمایش در کنسول با ToString تبدیل کنید. بلکه می توان به شکل ساده تری اون رو به کار برد. یعنی به جای:

    TimeSpan duration = new TimeSpan(1, 12, 23, 62);
    string output = "Time of Travel: " + duration.ToString("c");
    Console.WriteLine(output);
    بنویسید:
    Console.WriteLine("Time of Travel: {0:c}", duration);

  10. #10
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    ICloneable

    System.ICloneable
    این interface کلاس را مجبور به این می کند که قابلیت clone کردن را پیاده سازی کند.

    Object Clone()
    این قابلت می تواند به صورت دلخواه به شکل deep یا shallow پیاده سازی شود.
    برای پیاده سازی shallow می توان از MemberwiseClone استفاده کرد.
    حوصله توضیح تفاوت بین deep یا shallow را نداشتم برای همین فقط یک شکل ایجاد کردم که این تفاوت را توضیج بده.


    توجه داشته باشد که این متد خروجی از جنس object داره و عمدتا نیازمند Type Cast کردن هست.(فکر می کنید چرا؟)

    همچنین ببینید:
    http://msdn.microsoft.com/en-us/libr...cloneable.aspx
    http://msdn.microsoft.com/en-us/libr...ble.clone.aspx
    http://en.csharp-online.net/ICloneable

  11. #11
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    IAsyncResult

    System.IAsyncResult
    برای اجرا کردن یک تابع به شکل Asynchronous معمولا یک شی از نوع delegate معرفی می کنیم و یکی از متدهای آن یعنی BeginInvoke را صدا می زنیم این متد خروجی از نوع IAsyncResult به ما می دهد. همان اینترفیسی که بحث این پست هست. مثال خود MSDN رو پیگیری می کنیم:
    IAsyncResult result = caller.BeginInvoke(3000, 
    out threadId, null, null);


    حاصل بدست آمده قابلیت کنترل روی اجرای تابع Asynchronous را دارد. تا اینجا تابع Asynchronous ما اجرا شده و نمی دونیم الان در کدوم خط اجرا قرار داره. مثلا داره یک سری داده رو از بانک اطلاعاتی میگیره. این کار داره در یک Thread دیگه انجام میشه. و Thread ما داره به کار خودش ادامه میده. مثلا تو این مدت یک سری برگه رو داره Print می کنه. با این کار در وقت صرفه جویی کرده ایم و Thread اصلی برنامه را برای خواندن بانک اطلاعاتی متوقف نکردیم. حالا برگه ها چاپ شدند و می خواهیم نتیجه ی تابع رو بگیریم.
    برای این کار سه مرحله رو باید طی کنیم. اول اینکه با اینترفیس بدست آمده به Thread اصلی بگوییم که منتظر شود تا Thread دوم کارش رو تمام کند:
    result.AsyncWaitHandle.WaitOne();


    سپس نتیجه ی حاصله را جمع آوری کنیم:
    string returnValue = caller.EndInvoke(out threadId, result);


    و آخر سر هم AsyncWaitHandle را ببندیم:
    result.AsyncWaitHandle.Close();


    این هم مثال MSDN هست:
    http://msdn.microsoft.com/en-us/libr...yncresult.aspx

    اگر کسی در این زمینه تجربه داره و بهتر می تونه این interface رو توضیح بده، ممنون میشم که یک پست در اینجا قرار بده و من به اون لینک بدم.

  12. #12
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    ICollection

    System.ICollection

    این interface به این منظور استفاده می شود که شما یک مجموعه از اشیاء از یک نوع خاص را manage کنید.

    شما مثلا یک کلاس از نوع Box می سازید. بعد تصمیم می گیرید که یک کلاسی بسازید که یک مجموعه داده از نوع Box را نگهداری کنه. شما باید متد ها و property هایی همچون Add، Remove، Contains و غیره را پشتیبانی کنید.

    ممکنه این سوال به ذهنتون برسه که خوب چرا از از <List<Box استفاده نکنیم؟ در چواب باید گفت که خود <List<Box هم از همین interface استفاده می کنه. و در اکثر مواقع جوابگو هست مگر اینکه بخواهید خودتان به شیوه ی دیگری مجموعه را مدیریت کنید. مثلا ممکنه بخواهید یک لیست پیوندی یک طرفه را به کار ببرید.

    فکر می کنم که یک مثال ساده از هر چیز گویاتر باشه:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections;

    namespace myTutorial_Interface_ICollection
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }

    #region Designer
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
    if (disposing && (components != null))
    {
    components.Dispose();
    }
    base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
    this.buttonAdd = new System.Windows.Forms.Button();
    this.listBox1 = new System.Windows.Forms.ListBox();
    this.textBoxBoxName = new System.Windows.Forms.TextBox();
    this.buttonRemove = new System.Windows.Forms.Button();
    this.buttonClear = new System.Windows.Forms.Button();
    this.SuspendLayout();
    //
    // buttonAdd
    //
    this.buttonAdd.Location = new System.Drawing.Point(21, 26);
    this.buttonAdd.Name = "buttonAdd";
    this.buttonAdd.Size = new System.Drawing.Size(75, 23);
    this.buttonAdd.TabIndex = 2;
    this.buttonAdd.Text = "Add";
    this.buttonAdd.UseVisualStyleBackColor = true;
    this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click);
    //
    // listBox1
    //
    this.listBox1.FormattingEnabled = true;
    this.listBox1.Location = new System.Drawing.Point(102, 54);
    this.listBox1.Name = "listBox1";
    this.listBox1.Size = new System.Drawing.Size(149, 199);
    this.listBox1.TabIndex = 1;
    //
    // textBoxBoxName
    //
    this.textBoxBoxName.Location = new System.Drawing.Point(102, 28);
    this.textBoxBoxName.Name = "textBoxBoxName";
    this.textBoxBoxName.Size = new System.Drawing.Size(149, 20);
    this.textBoxBoxName.TabIndex = 0;
    //
    // buttonRemove
    //
    this.buttonRemove.Location = new System.Drawing.Point(21, 56);
    this.buttonRemove.Name = "buttonRemove";
    this.buttonRemove.Size = new System.Drawing.Size(75, 23);
    this.buttonRemove.TabIndex = 3;
    this.buttonRemove.Text = "Remove";
    this.buttonRemove.UseVisualStyleBackColor = true;
    this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click);
    //
    // buttonClear
    //
    this.buttonClear.Location = new System.Drawing.Point(21, 85);
    this.buttonClear.Name = "buttonClear";
    this.buttonClear.Size = new System.Drawing.Size(75, 23);
    this.buttonClear.TabIndex = 4;
    this.buttonClear.Text = "Clear";
    this.buttonClear.UseVisualStyleBackColor = true;
    this.buttonClear.Click += new System.EventHandler(this.buttonClear_Click);
    //
    // Form1
    //
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
    this.ClientSize = new System.Drawing.Size(272, 267);
    this.Controls.Add(this.buttonClear);
    this.Controls.Add(this.buttonRemove);
    this.Controls.Add(this.textBoxBoxName);
    this.Controls.Add(this.listBox1);
    this.Controls.Add(this.buttonAdd);
    this.Name = "Form1";
    this.Text = "Form1";
    this.ResumeLayout(false);
    this.PerformLayout();

    }

    #endregion

    private System.Windows.Forms.Button buttonAdd;
    private System.Windows.Forms.ListBox listBox1;
    private System.Windows.Forms.TextBox textBoxBoxName;
    private System.Windows.Forms.Button buttonRemove;
    private System.Windows.Forms.Button buttonClear;

    #endregion

    BoxCollection boxList = new BoxCollection();

    private void buttonAdd_Click(object sender, EventArgs e)
    {
    Box myBox = new Box(textBoxBoxName.Text);
    boxList.Add(myBox);
    RefreshList();
    textBoxBoxName.SelectAll();
    textBoxBoxName.Focus();
    }

    private void RefreshList()
    {
    listBox1.Items.Clear();
    foreach (Box b in boxList)
    listBox1.Items.Add(b.ToString());
    }

    private void buttonRemove_Click(object sender, EventArgs e)
    {
    if (listBox1.SelectedItem != null)
    {
    Box found = boxList.FindFirst(listBox1.SelectedItem.ToString() );
    if(found!=null)
    if (boxList.Remove(found))
    RefreshList();
    }
    }

    private void buttonClear_Click(object sender, EventArgs e)
    {
    boxList.Clear();
    RefreshList();
    }
    }

    public class Box
    {
    private string _name;
    private Box _NextBox=null;

    public string name
    {
    get
    {
    return _name;
    }
    }

    public Box(string name)
    {
    _name = name;
    }

    public override string ToString()
    {
    return name;
    }

    public Box NextBox
    {
    get { return _NextBox; }
    set { _NextBox = value; }
    }
    }

    public class BoxCollection : ICollection<Box>
    {
    Box firstBox;

    public Box FirstBox
    {
    get { return firstBox; }
    }

    Box LastBox
    {
    get
    {
    Box indexBox = FirstBox;
    if (indexBox == null)
    return null;
    while (indexBox.NextBox != null)
    indexBox = indexBox.NextBox;
    return indexBox;
    }
    }

    Box Before(Box item)
    {
    Box indexBox = FirstBox;
    if (indexBox == null)
    return null;
    while (indexBox.NextBox != null)
    {
    if (indexBox.NextBox == item)
    return indexBox;
    indexBox = indexBox.NextBox;
    }
    return null;
    }

    public Box FindFirst(string text)
    {
    foreach (Box b in this)
    if (b.name == text)
    return b;
    return null;
    }

    public void Add(Box item)
    {
    if (firstBox == null)
    firstBox = item;
    else
    LastBox.NextBox = item;
    }

    public void Clear()
    {
    firstBox = null;
    }

    public bool Contains(Box item)
    {
    Box indexBox = FirstBox;
    if (indexBox == null)
    return false;
    while (indexBox.NextBox != null)
    {
    if (indexBox == item)
    return true;
    indexBox = indexBox.NextBox;
    }
    return false;
    }

    public void CopyTo(Box[] array, int arrayIndex)
    {
    throw new NotImplementedException();
    }

    public int Count
    {
    get
    {
    Box indexBox = FirstBox;
    int count = 0;
    if (indexBox == null)
    return count;
    while (indexBox.NextBox != null)
    {
    count++;
    indexBox = indexBox.NextBox;
    }
    return count;
    }
    }

    public bool IsReadOnly
    {
    get { return false; }
    }

    public bool Remove(Box item)
    {
    Box before = Before(item);
    Box next = item.NextBox;
    if (!this.Contains(item))
    return false;
    if (firstBox == item)
    firstBox = firstBox.NextBox;
    else if (next == null)
    before.NextBox = null;
    else
    before.NextBox = next;
    return true;
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
    return new BoxEnumerator(firstBox);
    }

    IEnumerator<Box> IEnumerable<Box>.GetEnumerator()
    {
    return new BoxEnumerator(firstBox);
    }
    }

    public class BoxEnumerator:IEnumerator<Box>
    {
    Box currentItem;

    public BoxEnumerator(Box first)
    {
    currentItem =new Box("");
    currentItem.NextBox= first;
    }

    Box IEnumerator<Box>.Current
    {
    get { return currentItem; }
    }

    void IDisposable.Dispose()
    {
    currentItem = null;
    }

    object IEnumerator.Current
    {
    get { return currentItem; }
    }

    bool IEnumerator.MoveNext()
    {
    if (currentItem == null)
    return false;
    else
    {
    currentItem = currentItem.NextBox;
    return (currentItem!=null);
    }
    }

    void IEnumerator.Reset()
    {
    throw new NotSupportedException();
    }
    }
    }
    اگه سوالی هم داشتید در خدمتم.

  13. #13
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    IDictionary

    System.Collections.IDictionary

    از اون جایی که دیدم زیاد از این تاپیک استقبال نمیشه من هم زیاد وقت صرفش نمی کنم. و یک سری توضیح سریع میدم فقط جهت معرفی. در صورتی که مایل بودید می تونید به لینک MSDN مراجعه کنید. خیلی هم کاملتر هست. و این تاپیک برای کسانی هست که حال انگلیسی خوندن رو ندارند.
    لینک MSDN

    این اینترفیس همون طور که از نامش پیداست، باید به صورت یک دیکشنری پیاده سازی بشه. این دیکشنری داده هایی از جنس DictionaryEntry را به شکل آرایه در خود دارد. این داده ها از دو بخش key و value تشکیل شده اند. توجه کنید که key ها نباید تداخل نام داشته باشند.

    MSDN- لیست متدها
    متدهای پشتیبانی شونده:

    • Add
    • Clear
    • Contains
    • CopyTo
    • GetEnumerator()
    • GetEnumerator()
    • Remove

    توجه داشته باشید که سه نوع دیکشنری می توان داشت:

    • فقط خواندنی: قابل تغییر نیست.
    • با طول ثابت: قابلیت add یا remove را به کاربر نمی دهد. موارد موجود را می توان در آن تغییر داد.
    • با طول متغیر: هیچ کدام از این محدودیت ها را ندارد.


    مثال MSDN

  14. #14
    کاربر تازه وارد آواتار مهدی عابدینی
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    پست
    62

    نقل قول: interface های مهم در C#‎‎‎‎‎‎‎‎‎‎

    مطلابتون عالی بود ، امیدوارم موفق باشید
    لطفا ادامه بدید

  15. #15
    کاربر تازه وارد آواتار مهدی عابدینی
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    تهران
    پست
    62

    نقل قول: interface های مهم در C#‎‎‎‎‎‎‎‎‎‎

    مطالبتون عالی بود
    تشکر از زحماتتون
    لطفا ادامه بدید.

  16. #16
    کاربر دائمی آواتار cardano7
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    کارتون خواب
    پست
    473

    IButtonControl

    System.Windows.Forms.IButtonControl

    این اینترفیس برای این به کار می روی که دکمه یی که طراحی کردید بتواند به عنوان دکمه ی پیشفرض یا cancel با محیط خود ارتباط بر قرار کند.

    اعضای این اینترفیس:

    • پراپرتی:

    DialogResult: بعد از اینکه روی این دکمه کلید کردید، چه مقداری به عنوان DialogResult بر گردانده شود.
    • توابع:

    NotifyDefault: تعیین می کند که آیا دکمه ی ما پیشفرض هست یا نه.
     public void NotifyDefault(bool value) 
    PerformClick: زمانی که دکمه فشار داده شود، فراخوانی می شود.
    لینک MSDN

  17. #17

    نقل قول: interface های مهم در C#‎‎‎‎‎‎‎‎‎‎‎‎‎

    دوست عزیز ابتدا از اینکه به معرفی اینترفیس ها پرداختید و .... تشکر میکنم ولی برای اینکه برای سایر دوستان هم روشن بشه باید بگم این Interface هایی که معرفی میکنید متعلق به زبان C#‎ نیست ...
    چون توی پست اولتون گفته بودید اینترفیس های C#‎ !!!!!!

    کلا اینها توابع و ابزارهایی هستند که دات نت در اختیار برنامه نویسان قرار داده و اکثرا توی سایر زبان های تحت .net هم قابل استفاده هستند ... حالا چه Vb , چه C#‎ !, ...
    موفق باشید

  18. #18

    نقل قول: interface های مهم در C#‎‎‎‎‎‎‎‎‎‎

    این تاپیک رو ادامه نمیدید ؟‌
    من مشکلی با اینتر فیس IComparer داشتم
    امیدوار بودم با توضیحات شما حل شه

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •