فایل‌های پروژه‌ها
PdfRpt-1.7.zip
- Added WingdingsSymbolField.
- Improved detection of nested properties.
- Added new overload for ProgressBarField template. Now it's possible to select its color based on the current row's values.
- Added WingdingsSymbols/WingdingsSymbolsPdfReport.cs sample.
- Added new NestedProperties/NestedPropertiesPdfReport.cs sample.
- Added another WPF Sample (WpfAppAcroReader).
- Enabled full compression.
- Improved QRCode (Barcodes/BarcodesPdfReport.cs) sample to use a transparent background.
- Improved the ASP.MVC sample to show how to Flush or Browse the produced PDF file.
- Improved the DynamicCrosstab/DynamicCrosstabPdfReport.cs sample to show how to change the captions of the header row.

اشتراک‌ها
روش مهاجرت از Moq به NSubstitute

Unit testing is an integral part of modern software development. For years, Moq has been a popular choice in the .NET ecosystem for creating mock objects. Recent concerns over Moq’s SponsorLink feature have prompted some developers to consider such a switch. In this article, we delve into why you might consider NSubstitute over Moq and how to make the transition. 

روش مهاجرت از Moq به NSubstitute
مطالب
SASS #2
در قسمت قبل، روش‌های مختلف کامپایل فایل‌های SASS را بررسی کردیم. در ادامه می‌خواهیم با syntax آن بیشتر آشنا شویم.

متغیرها (Variables)

متغیرها در SASS با استفاده از $ در ابتدای نام آن، به عنوان یک مقدار مورد استفاده‌ی در CSS تعریف می‌شوند. شما در SASS می‌توانید متغیرهایی را برای margin ،font-size و یا padding و غیره، تعریف کنید. استفاده از متغیرها این امکان را به شما می‌دهد که خیلی راحت‌تر از style‌های تعریف شده، مجدد استفاده کنید.

شما 6 نوع مختلف متغیر را می‌توانید با استفاده از SASS بکار ببرید.

  • Strings (مثال: ;"myString: "your text here$ )
  • Numbers (مثال: ;myNum: 16px$)
  • Colors (مثال: ;myColor: aqua$)
  • Booleans (مثال: ;myBool: true$)
  • Lists (مثال: ;myItemList: 1px solid red$)
  • Nulls (مثال: ;myVar: null$)

برای مثالی از استفاده‌ی از این متغیرها، یک فایل را با نام styles.scss ایجاد کرده و کدهای زیر را در آن وارد کنید:

$myColor: #FFF726;
$myBackColor: #2B14FF;
$myString: "I Love ";
$myFontSize: 13px;
$myMargin: 0px auto;
$myWidth: 300px;
 
h1 {
   color: $myColor;
   margin: 0;
   padding: 0;
}

h1:before{
  content: $myString;
}

#container {
   width: $myWidth;
   margin: $myMargin;
   background-color:$myBackColor;
   text-align:center;
}
پس از کامپایل فایل SASS و اجرای کد بالا، مرورگر شما باید خروجی را به این صورت داشته باشد:


ریاضی (Math)

برخلاف SASS ،CSS به ما امکان استفاده از عبارات ریاضی را می‌دهد. عملگرهای جمع + ، تفریق - ، تقسیم / ، ضرب * ، باقیمانده % ، مساوی == ، نامساوی =! را  SASS پشتیبانی می‌کند. در هنگام استفاده از عبارات ریاضی چند نکته وجود دارد که باید رعایت کنید:

نکته1: چون علامت / در CSS به عنوان یک کوتاه کننده استفاده می‌شود مانند font: 14px/16px، در صورتیکه بخواهید عمل تقسیم را بر روی مقدار ثابتی انجام دهید باید آنها را درون پرانتر قرار دهید.

$fontDiff: (14px/16px);
نکته2: شما نمی توانید واحدهای مختلف را با هم استفاده کنید.
$container-width: 100% - 20px;
مثال بالا کار نمی‌کند، در صورتیکه نیاز به چنین محاسبه‌ای داشتید می‌توانید از تابع calc در CSS استفاده کنید؛ چرا که نیاز به محاسبه‌ی در زمان اجرا را دارید.

حال می‌خواهیم براساس عرض container، ستون‌های پویایی را ایجاد کنیم:
$container-width: 100%;

.container {
  width: $container-width;
}

.col-4 {
  width: $container-width / 4;
}
که پس از کامپایل به صورت زیر تبدیل می‌شود:
.container {
   width: 100%;
}

.col-4 {
    width: 25%;
}

مشاهده‌ی پیاده سازی مثال بالا اینجا.

توابع (Functions)

یکی از بهترین قسمت‌های SASS، توابع پیاده سازی شده‌ی آن است. شما می‌توانید لیست بزرگی از توابع SASS را در اینجا مشاهده کنید.

برای نمونه برخی از توابع مربوط به کار با رنگ‌ها را توضیح می‌دهیم:

  • (darken ($color, $amount: این تابع برای تیره‌تر کردن یک کد رنگ می‌باشد. شما برای استفاده‌ی از این تابع باید دو مقدار را به آرگومان‌های ورودی این تابع که به ترتیب کد رنگ و میزان تیره‌تر شدن آن به صورت درصد از %0 تا %100 می‌باشند، ارسال کنید و خروجی آن کد رنگ تولید شده است. توجه داشته باشید نوع سیستم رنگی ارسال شده به عنوان پارامتر color$، خروجی این تابع نیز همان نوع می‌باشد.
darken(hsl(25, 100%, 80%), 30%) => hsl(25, 100%, 50%)
darken(#800, 20%) => #200
  • (lighten ($color, $amount: این تابع برای روشن‌تر کردن یک رنگ می‌باشد و دقیقا برعکس تابع darken عمل می‌کند.
lighten(hsl(0, 0%, 0%), 30%) => hsl(0, 0, 30)
lighten(#800, 20%) => #e00
  • (alpha ($color) / opacity($color: با استفاده از این دو تابع می‌توانید میزان شفافیت/کدری را مشخص کنید.
  • (mix ($color1, $color2, $weight:50% : با استفاده از این تابع می‌توانید دو رنگ را با هم ترکیب کنید. مقدار پیش فرض آرگومان weight$ برابر %50 می‌باشد و تعیین آن اختیاری است. محدوده‌ی پذیرش مقدار weight$ هرچه به %0 نزدیک‌تر باشد، باعث نزدیک‌تر بودن رنگ خروجی به رنگ دوم و هرچه به %100 نزدیکتر باشد رنگ خروجی به رنگ اول نزدیک‌تر می‌شود. توجه: میزان شفافیت/کدری را نیز می‌تواند تشخیص دهد.
mix(#f00, #00f) => #7f007f
mix(#f00, #00f, 25%) => #3f00bf
mix(rgba(255, 0, 0, 0.5), #00f) => rgba(63, 0, 191, 0.75)

تو در تو (Nesting)

SASS امکان تعریف استایل‌های تو در تو را به شما می‌دهد که باعث خواناتر شدن استایل‌های نوشته شده می‌شود. به عنوان مثال به کد CSS زیر توجه کنید:

#container {
    width: 500px;
    margin: 0 auto;
}

#container p {
   font-family: Arial;
   font-size: 13px;
}

#container h1 {
   font-family: Tahoma;
   font-size: 15px;
}

#container h2 {
   font-family: Helvetica;
   font-size: 14px;
}
حال نسخه‌ی SASS مثال بالا می‌شود:
$myFontsize1: 13px;
$myFontsize2: 18px;
$myFontsize3: 25px;
$myWidth: 500px;
$myMargin: 0px auto;

#container {
    width: $myWidth;
    margin: $myMargin;

    p {
        font-family: Arial;
        font-size: $myFontsize1;
    }

    h1 {
        font-family: Tahoma;
        font-size: $myFontsize3;
    }

    h2 {
        font-family: Helvetica;
        font-size: $myFontsize2;
    }
}
توجه کنید تمام element هایی که درون container# قرار دارند، بدون ذکر نام container# نوشته شده‌اند و این کار سبب کمتر شدن کدهای نوشته شده و خواناتر شدن آن می‌شود.
در صورتیکه نیاز به دسترسی به والد داشته باشید کافیست از علامت & استفاده کنید.
a.myAnchor {
    color: blue;

    &:hover {
        text-decoration: underline;
    }

    &:visited {
        color: purple;
    }
}
خوب تا اینجا شما با روش نوشتن استایل‌های به صورت تو در تو آشنا شدید. حال اگر بخواهید کد‌های نوشته شده‌ی تو در تو را به صورت غیر تو در تو کامپایل کنید، باید از کلمه‌ی کلیدی at-root@ قبل استایلی که می‌خواهید به صورت تو در تو تعریف نشود، استفاده کنید.
.first-component {
    .text { font-size: 1.4em; }
    .button { font-size: 1.7em; }

    .second-component {
        .text { font-size: 1.2em; }
        .button { font-size: 1.4em; }
    }
}
مثال بالا در حالت تو در تو، پس از کامپایل به صورت زیر تبدیل می‌شود:
.first-component .text {
  font-size: 1.4em;
}
.first-component .button {
  font-size: 1.7em;
}
.first-component .second-component .text {
  font-size: 1.2em;
}
.first-component .second-component .button {
  font-size: 1.4em;
}
حال با استفاده از at-root@ به صورت زیر می‌شود:
.first-component .text {
  font-size: 1.4em;
}
.first-component .button {
  font-size: 1.7em;
}
.second-component .text {
  font-size: 1.2em;
}
.second-component .button {
  font-size: 1.4em;
}
اشتراک‌ها
تعدادی از ویژگی‌های پیشنهادی C# 9.0
// Before
public class Widget  
{
    private readonly int _foo;
    private readonly WidgetConfiguration _config;

    public Widget(int foo, WidgetConfiguration config)
    {
         _foo = foo;
         _config = config;
    }
}


// After
public class Widget  
{
     public Widget(int _foo, WidgetConfiguration _config)
     {
          // If you wanted one of these properties to be publicly accessible, you could define
          // and set one of those here, otherwise the arguments will be privately accessible
          // as fields.
     }
}
تعدادی از ویژگی‌های پیشنهادی C# 9.0
اشتراک‌ها
تعدادی از ویژگی‌های پیشنهادی C# 9.0

The long road to C# 9 has already begun and this is the first article in the world about the C# 9 Candidate features. Once you have completed reading this article, you will hopefully be better prepared for the new C# challenges you will meet in the future. 

تعدادی از ویژگی‌های پیشنهادی C# 9.0
اشتراک‌ها
مقایسه React و Angular 4

When you start working on a new web application you will probably need to analyze different tools to deal with the different functionalities that you have to work on. As soon as you start searching for alternatives you are going to run across Angular and React, they are without any doubt two of the major options to consider, at least till today.

مقایسه React و Angular 4
اشتراک‌ها
WebAssembly کردن NET. با Blazor

 WebAssembly is one of the newest technologies to hit the web dev world with some promising new features around performance and expanding the boundaries of web languages. We’ll take a look at using it with Blazor to allow .NET developers to create a SPA. 

WebAssembly کردن NET. با Blazor