نگارش ابتدایی « iTextSharp.LGPLv2.Core » بر اساس کدهای اولیهی iTextSharp بود که مستقیما از جاوا به سیشارپ ترجمه شده بود. این کدها پر بودند از ساختارهای دادهای مانند Hashtable و ArrayList که مرتبط هستند با روزهای آغازین ارائهی دات نت 1؛ پیش از ارائهی Generics. برای مثال نوع Hashtable، همانند ساختار دادهی Dictionary عمل میکند، اما جنریک نیست؛ یعنی شبیه به <Dictionary<object, object عمل میکند و برای کار با آن، باید مدا ...
طرح مشکل! نیاز به دریافت انواع و اقسام مقادیر یک جنس (مانند اعداد و یا تاریخ) در کامپوننتهای Blazor
فرض کنید میخواهید عددی را در کامپوننتی، دریافت کنید. میتوان اینکار را با تعریف یک پارامتر عمومی به صورت زیر انجام داد: [Parameter] public int Value { get; set; }
و ... مشکل از همینجا شروع میشود! خوب، برای نوعهای double ، decimal ، float ، long و غیره چه باید کرد؟ آیا باید به ازای هر کدام، یک پارامتر مخصوص را تعریف ...
در زمان نوشتن تستهای مختلف (Unit - Integration - UI) گاهی اوقات پیش میآید که بخواهید تمامی خصوصیتهای یک شیء را تایید کنید. معمولا نوشتن اعتبارسنجی برای همه خصوصیتها و همین طور پیامهای استثناء برای هر یک در زمان عدم تایید اعتبار، کار بسیار زمانبری است. در این مقاله به شما نشان خواهم داد که چگونه با نوشتن یک اعتبارسنج عمومی از اتلاف زمان زیادی جلوگیری کنید.
با استفاده از کلاس زیر میتوان کار اعتبارس ...
یکی از مفاهیمی که بنظر پیچیده میآمد و هر دفعه موقع مطالعه از آن فرار میکردم، همین بحث COVARIANCE و CONTRAVARIANCE بود. در اینجا قصد دارم به زبان ساده این مفاهیم را شرح دهم. Covariance A را در نظر بگیرید که قابل تبدیل به B باشد. در اینصورت X، دارای پارامتر کواریانس است اگر <X<A قابل تبدیل به <X<B باشد. بدون ذکر مثال شاید این تعریف خیلی ملموس نباشد. پس بهتر است با ذکر مثال به تشریح مفاهیم بپردازیم. نکته: ...
استفاده از Tupleها جهت مقدار برگشتی یک متد
اکثر مواقع برنامه نویسان برای بازگشت چند مقدار توسط یک متد، به روشهایی مثل تعریف کلاسهای POCO یا پارامترهایی از نوع out متوسل میشوند. به وسیلهی Tupleها میتوان چند مقدار مختلف را به عنوان خروجی متد بازگشت داد: private Tuple<string, string, int> GetPersonInfo()
{
return new Tuple<string, string, int>("Steve", "Jobs", 56);
}
همچنین از Tupleه ...
در قسمت قبلی به مقدمات و ساخت لیستهای ایستا و پویا به صورت دستی پرداختیم و در این قسمت (مبحث پایانی) لیستهای آماده در دات نت را مورد بررسی قرار میدهیم.
کلاس ArrayList این کلاس همان پیاده سازی لیستهای ایستایی را دارد که در مطلب پیشین در مورد آن صحبت کردیم و نحوه کدنویسی آن نیز بیان شد و امکاناتی بیشتر از آنچه که در جدول مطلب پیشین گفته بودیم در دسترس ما قرار میدهد. از این کلاس با اسم untyped dynamically-extendable a ...
احتمالا در بیشتر مقالات (فارسی/انگلیسی) عبارات هایی مثل نمونههای زیر را دیده اید : where T:clas
where T:struc
...
در این مقاله قصد داریم بپردازیم به «مقید سازی پارامترهای نوع جنریک» و اینکه چه کاربردی دارند و در چه زمانی بهتر است از آنها استفاده کنیم و نحوه استفاده از آنها چگونه است. فرض میکنیم که خوانندهی محترم با مفاهیم جنریک آشنایی دارد. در صورتیکه با جنریکها آشنا نیستید ابتدا مروری داشته باشید بر ج نریکها و بعد ای ...
کامپایلر سیشارپ اگر نتواند نوعهای عملوندها را در حین بکارگیری عملگرها تشخیص دهد، اجازهی استفاده از عملگر را نخواهد داد و کار کامپایل، با یک خطا خاتمه مییابد. برای نمونه مثال زیر را در نظر بگیرید: public interface ICalculator<T>
{
T Add(T operand1, T operand2);
}
public class Calculator<T> : ICalculator<T>
{
public T Add(T operand1, T operand2)
{
...
متدهای جنریک متدهای جنریک، دارای پارامترهایی از نوع جنریک هستند و بوسیلهی آنها میتوانیم نوعهای (type) متفاوتی را به متد ارسال نمائیم. در واقع از متد، یک نمونه پیاده سازی کردهایم، در حالیکه این متد را برای انواع دیگر هم میتوانیم فراخوانی کنیم. تعریف ساده دیگر جنریک متدها اجازه میدهند متدهایی با نوع هایی که در زمان فراخوانی مشخص کرده ایم، داشته باشیم. نحوه تعریف یک متد جنریک بشکل زیر است: ...
قبل از ادامه آموزش مفاهیم جنریک، در نظر داشتن این نکته ضروری است که
مطالبی که در این سری مقالات ارائه میشود در سطح مقدماتی است و قصد من آشنا نمودن برنامه نویسانی است که با این مفاهیم ناآشنا هستند ولی با مطالعه این مقاله میتوانند کدهای تمیزتر و بهتری تولید کنند و همینطور این مفاهیم ساده، پایهای باشد برای فراگیری سایر
نکات تکمیلی و پیچیدهتر جنریکها.
در قسمت قبلی ، نحوه تعریف کلاس جنریک شرح دا ...