.NET | دات نت – Telegram
.NET | دات نت
285 subscribers
121 photos
7 videos
26 files
165 links
دنیای شگفت انگیز و جذاب دات نت رو زیر ذره‌بین می‌بریم و تجربه ها رو به اشتراک میذاریم

به جمع توسعه دهندگان دات نت خوش اومدی 🥰❤️


گروه: https://news.1rj.ru/str/dndevelopchat
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🐜 انیمیشن کوتاه Ant – وقتی یک مورچه‌یِ متفاوت سازمان رو متحول می‌کنه!
👍4
دوره هنر پرامپت‌نویسی؛ ورود هوشمندانه به دنیای هوش مصنوعی - رایگان

🔗 دانشکار
دوره لینکدین - رایگان

🔗
دانشکار
📌 تفاوت IsNullOrEmpty و IsNullOrWhiteSpace در سی شاپ

در زبان #CSharp برای بررسی اینکه یک رشته مقداردهی شده یا نه، معمولاً از متد string.IsNullOrEmpty() استفاده می‌کنیم. این متد بررسی می‌کنه که رشته null یا خالی ("") نباشه.

اما یه نکته‌ی مهم اینه که این متد فاصله‌ها (مثل " " یا "\t") رو خالی حساب نمی‌کنه. یعنی رشته‌ای که فقط شامل فاصله باشه، از نظر IsNullOrEmpty معتبره!

برای بررسی دقیق‌تر، باید از string.IsNullOrWhiteSpace() استفاده کنیم. این متد علاوه بر null و خالی بودن، رشته‌هایی که فقط شامل فاصله یا تب هستن رو هم نامعتبر در نظر می‌گیره.

مثال:
string a = null;
string b = "";
string c = " ";

Console.WriteLine(string.IsNullOrEmpty(a)); // true
Console.WriteLine(string.IsNullOrEmpty(b)); // true
Console.WriteLine(string.IsNullOrEmpty(c)); // false

Console.WriteLine(string.IsNullOrWhiteSpace(c)); // true

استفاده از IsNullOrWhiteSpace در اعتبارسنجی ورودی‌ها، فرم‌ها، و داده‌های کاربر باعث جلوگیری از باگ‌های پنهان می‌شه.
👍43🔥2
از Magic Numbers اجتناب کنید !!

وقتی در متد ‎IsFreeShipping عدد ‎5000 به صورت مستقیم استفاده شده مشخص نیست این عدد چه مفهومی دارد. ممکن است نشان دهنده ی «حداقل مبلغ برای ارسال رایگان» باشد یا صرفاً یک عدد است که یکی برای تست نوشته است . چنین افتضاحی باعث میشود کد مبهم و غیر قابل درک شود.

راه کار درست این است که مقدار ‎5000 به صورت یک ثابت معنادار مثل ‎FreeShippingThreshold تعریف شود.

در این حالت هدف عدد به وضوح مشخص است، کد خواناتر میشود و در صورت تغییر سیاست فروشگاه (مثلاً افزایش این مقدار / میزان به ‎6000)، تنها کافی است مقدار ثابت تغییر داده شود و نیاز به تغییر در بخش های متعدد کد نخواهد بود.

🔗 LinkedIn Post
👍5
🚀 نقشه راه فارسی ASP.NET Core – ۲۰۲۵

اگر تازه می‌خوای ASP.NET Core یاد بگیری یا مسیرت رو سازماندهی کنی، این مخزن برات مفیده.
قدم‌به‌قدم مسیرها، ابزارها و کتابخانه‌های کلیدی برای تبدیل شدن به یک توسعه‌دهنده حرفه‌ای ASP.NET Core در این نقشه راه فارسی جمع‌آوری شده.

⭐️ بررسی کن، ستاره بده و یادگیریت رو برنامه‌ریزی کن:

https://github.com/hheydarian/AspNetCore-Developer-Roadmap-persian
5👍2🆒2
#سامانه_سیستم_اطلاعات_مدیریت_آرمان
نسخه: V218-cff21d5, 1404/06/24

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



نسخه دمو سامانه مدیریت اطلاعات آرمان:
💻 http://bgsarmansystem.tryasp.net/
User: demo1
Pass: Demo@1234

کانال سامانه مدیریت اطلاعات آرمان:
👉 https://news.1rj.ru/str/bgsarmansystem


وب سایت شرکت بهینه گستر صنایع آرمان:
https://bgsiran.ir
تلگرام:
📡 https://news.1rj.ru/str/ijieor
📡 http://t.me/bgsarman1
👉 https://news.1rj.ru/str/drrezalotfi
👉 https://news.1rj.ru/str/OREUROONLINE
👉 https://news.1rj.ru/str/bgsarmansystem

ایتا:
https://eitaa.com/bgsarman1
بله:
https://ble.ir/bgsarman1
روبیکا:
https://rubika.ir/bgsarman1
👍2
🤔 چرا == همیشه جواب نمی‌ده؟ تفاوتش با .Equals() توی سی شارپ چیه؟

فرض کن داری یه فرم ثبت‌نام می‌سازی و می‌خوای بررسی کنی که دو مقدار ورودی با هم برابرن یا نه. می‌زنی:
c#
if (input1 == input2) { /* do something */ }

ولی یه روز می‌بینی که مقایسه درست کار نمی‌کنه—در حالی که مقدارها یکی‌ان! اینجاست که باید بدونی تفاوت == و .Equals() چیه.
🔹 == برای انواع پایه مثل int, string, bool معمولاً خوب جواب می‌ده.
🔹 ولی برای کلاس‌های سفارشی، ممکنه فقط آدرس حافظه رو مقایسه کنه—not the actual content.
مثال:
c#
string a = "hello";
string b = new string("hello".ToCharArray());

Console.WriteLine(a == b); // true
Console.WriteLine(a.Equals(b)); // true

اما حالا یه کلاس ساده بساز:
c#
class Person {
public string Name;
}

و مقایسه کن:
c#
var p1 = new Person { Name = "Hamed" };
var p2 = new Person { Name = "Hamed" };

Console.WriteLine(p1 == p2); // false
Console.WriteLine(p1.Equals(p2)); // false

چرا؟ چون هیچ‌کدوم از این‌ها مقدار Name رو مقایسه نمی‌کنن. اگه بخوای .Equals() درست کار کنه، باید Overrideش کنی:
c#
public override bool Equals(object obj)
{
return obj is Person other && this.Name == other.Name;
}

📌 نتیجه؟ اگه با کلاس‌های سفارشی کار می‌کنی، همیشه حواست باشه که == ممکنه گمراهت کنه. برای مقایسه‌ی واقعی، از .Equals() استفاده کن و اگه لازم شد، Overrideش کن.
👍32🔥1
Forwarded from InvestFund
This media is not supported in your browser
VIEW IN TELEGRAM
🎞 سم التمن: موفقیت ربطی به باهوش بودن نداره!

💡خیلی‌ها فکر می‌کنن بهترین فاندرها برنده می‌شن چون باهوش‌ترن، شبکه قوی‌تری دارن یا توی حوزه‌شون تخصص بالایی دارن. ولی سم التمن (باتجربه YC و OpenAI) میگه رمز اصلی این نیست.
اما سم التمن میگه رمز اصلی چیز دیگه‌ست: سرسختی و پافشاری بی‌وقفه. همون چیزی که پل گراهام بهش می‌گه «relentlessly resourceful».

📌 التمن می‌گه سه ویژگی حیاتی توی همه‌ی فاندرهای موفق مشترکه:

▫️تمرکز: حواس‌پرتی‌ها رو کنار بذارن و فقط کار اصلی رو جلو ببرن.
▫️باور به خود: چون اگه خودت باور نکنی، هیچ‌کس دیگه‌ای باور نمی‌کنه.
▫️ارتباطات شخصی: از جذب تیم و سرمایه تا فروش ویژن و ساختن اعتماد.

📍و یک عامل مهم دیگه که خیلی‌ها دست‌کم می‌گیرن: ارتباط شفاف و ساده. تقریباً همه‌ی استارتاپ‌های بزرگ فاندرهایی داشتن که می‌تونستن ایده‌شون رو در کمتر از ۲۵ کلمه توضیح بدن.

📌 فاندرهایی که این ویژگی‌ها رو داشته باشن، تیم قوی می‌سازن، اعتماد می‌گیرن و ایده‌شون رو به نتیجه می‌رسونن.

@Investingfund
2👏2👍1
سلام وقت بخیر.
من یه پروژه مایکروسرویسی با دات نت اسپایر کار کردم. که نکات و معماری و پترن های خوبی داخلش هست که میتونید ازش استفاده کنید.

در صورتی که خوشتون اومد ، خوشحال میشم به این ریپازیتوری من ستاره بزنید .

https://github.com/YAS-SIIN/PlainBridge

<Yasin/>
7👍1
♨️مایکروسافت اعلام کرد: پشتیبانی ۲۴ ماهه برای نسخه‌های STS در NET 9. تا 2026



مایکروسافت مدت پشتیبانی نسخه‌های STS در NET. را از ۱۸ ماه به ۲۴ ماه افزایش داد. این تغییر از NET 9. آغاز می‌شود و تا نوامبر ۲۰۲۶ ادامه دارد. نسخه‌های LTS همچنان سه سال پشتیبانی خواهند داشت.


اطلاعات بیشتر 👇👇

https://bugeto.net/blog/dotnet-sts-releases-supported-for-24-months
👍42
🔍 تفاوت string و String در سی شارپ — نکته‌ای ساده ولی مهم

اگه تازه با سی شارپ شروع کرده باشی، احتمالاً دیدی که بعضی‌ها از string استفاده میکنن و بعضی‌ها از String.

شاید فکر کنی فرق دارن، ولی واقعیت اینه که:
🔹 string یه کلمه کلیدی توی زبان سی شارپ
🔹 String یه کلاس توی فضای نام System
در واقع، string فقط یه میانبر برای System.String ـ. یعنی این دو کاملاً معادلان:

string name = "Hamed";
String city = "Tehran";

هر دو متغیر از نوع System.String هستن و میتونی روی هر دو از متدهایی مثل .Length, .ToUpper(), .Contains() و غیره استفاده کنی.

📌 نکته‌ی مهم:
برای تعریف متغیرها، استفاده از string رایج‌تر و خواناتر هست.
ولی وقتی میخوای از متدهای کلاس String استفاده کنی (مثل String.IsNullOrEmpty())، باید از String استفاده کنی چون به کلاس اشاره داره.
این تفاوت کوچیک شاید توی اجرا تأثیری نداشته باشه، ولی توی سبک کدنویسی و خوانایی پروژه خیلی مهمه.
👍2👨‍💻21👏1
🧠 تفاوت Value Type و Reference Type در سی شارپ — پایه‌ای ولی حیاتی

اگه بخوای کدنویسی سی شارپ رو عمیق‌تر یاد بگیری، باید بدونی که داده‌ها به دو دسته ی اصلی تقسیم میشن:
🔹 Value Type
🔹 Reference Type
ولی فرقشون چیه؟

Value Type:
داده‌ها مستقیماً در حافظه ذخیره میشن.
وقتی یه متغیر رو به متغیر دیگه اختصاص میدی، یه کپی از مقدار ساخته میشه.
مثال ها: int, double, bool, struct

int a = 5;
int b = a;
b = 10;
// a هنوز 5 هست

Reference Type:
داده‌ها به صورت ارجاعی ذخیره میشن—یعنی متغیر فقط یه آدرس به حافظه داره.
وقتی یه متغیر رو به متغیر دیگه اختصاص میدی، هر دو به یه محل حافظه اشاره میکنن.
مثال ها: class, string, array, object

int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;
arr2[0] = 99;
// arr1 هم تغییر کرده

📌 نکته ی مهم: درک تفاوت این دو نوع داده، توی طراحی کلاس ها، مدیریت حافظه، و جلوگیری از باگ های عجیب خیلی مهمه.
👍32🔥1
🔄 تفاوت بین ==, .Equals(), و .CompareTo() در سی شارپ — مقایسه‌ی حرفه‌ای

اگه بخوای دو مقدار رو توی سی شارپ مقایسه کنی، گزینه‌های مختلفی داری: ولی هرکدوم رفتار خاص خودش رو داره.

==
برای مقایسه‌ی مقدار استفاده میشه.
برای انواع پایه مثل int, string معمولاً خوب جواب میده.
ولی برای کلاس‌های سفارشی ممکنه فقط آدرس حافظه رو مقایسه کنه.

.Equals()
یه متد برای مقایسه‌ی مقدار منطقی بین دو شیء.
میتونه Override بشه تا رفتار سفارشی داشته باشه.

.CompareTo()
برای مقایسه‌ی ترتیبی استفاده میشه.
خروجی عددی میده:
0 یعنی برابر
< 0 یعنی شیء اول کوچکتره
> 0 یعنی شیء اول بزرگتره
مثال:

string a = "apple";
string b = "banana";

Console.WriteLine(a == b); // false
Console.WriteLine(a.Equals(b)); // false
Console.WriteLine(a.CompareTo(b)); // -1

📌 نکتهی حرفه‌ای: اگه میخوای فقط برابری رو بررسی کنی، == یا .Equals() کافیه. ولی اگه میخوای ترتیب یا مرتب‌سازی انجام بدی، .CompareTo() انتخاب درستیه.
2👍2🦄1
🧠 تفاوت بین readonly و const در سی شارپ — کنترل بهتر روی داده‌های ثابت

اگه بخوای یه مقدار رو توی برنامه ت ثابت نگه داری، احتمالاً بین const و readonly شک میکنی. ولی تفاوتشون فقط توی اسم نیست—توی زمان مقداردهی و نوع استفاده فرق های مهمی دارن.

const
مقدارش باید در زمان کامپایل مشخص باشه
فقط برای انواع پایه مثل int, string, double مناسبه
به صورت ضمنی static هست
نمیتونه مقدارش از بیرون کلاس یا در زمان اجرا تغییر کنه

const double Pi = 3.14;

readonly
مقدارش میتونه در زمان اجرا تعیین بشه
معمولاً توی سازندهی کلاس مقداردهی میشه
میتونه برای انواع پیچیده‌تر هم استفاده بشه
فقط یک بار مقداردهی میشه و بعدش قابل تغییر نیست

readonly DateTime createdAt;

public MyClass() {
createdAt = DateTime.Now;
}

📌 نکتهی حرفه‌ای: اگه مقدار از قبل مشخصه و هیچ وقت تغییر نمیکنه، const انتخاب خوبیه. اگه مقدار باید در زمان اجرا تعیین بشه ولی بعدش ثابت بمونه، از readonly استفاده کن.
3👍3💅1
🧱 تفاوت بین class و struct در سی شارپ — انتخاب درست برای طراحی بهتر

اگه بخوای یه نوع داده‌ی جدید بسازی، معمولاً بین class و struct باید انتخاب کنی. ولی این انتخاب فقط ظاهری نیست—تأثیر زیادی روی عملکرد و رفتار برنامه ت داره.

class
Reference Type
در حافظه‌ی Heap ذخیره میشه
وقتی به متغیر دیگه ای اختصاص داده بشه، فقط آدرسش منتقل میشه
میتونه دارای سازنده، وراثت، و رفتار پیچیده باشه

struct
Value Type
در حافظه‌ی Stack ذخیره میشه
وقتی به متغیر دیگه ای اختصاص داده بشه، یه کپی کامل ساخته میشه
سبک تره، ولی محدودتر: نمیتونه از کلاس دیگه ارث بری کنه
مثال:

struct Point {
public int X;
public int Y;
}

class Person {
public string Name;
public int Age;
}

📌 نکتهی حرفه‌ای: اگه نوع داده ت ساده، سبک، و بدون رفتار پیچیده ست (مثل مختصات یا رنگ)، از struct استفاده کن. اگه نیاز به انعطاف، وراثت، یا مدیریت حافظه داری، class انتخاب بهتریه.
3👍1👾1
🧩 تفاوت بین interface و abstract class در سی شارپ — طراحی منعطف تر، کدنویسی تمیزتر

اگه بخوای یه ساختار پایه برای کلاس هات تعریف کنی، معمولاً بین interface و abstract class باید انتخاب کنی. ولی این انتخاب فقط به ظاهر نیست—روی انعطاف پذیری، تست پذیری، و توسعه‌پذیری پروژه ت تأثیر مستقیم داره.

interface
فقط شامل تعریف متدها و پراپرتی ها هست
هیچ پیاده سازی نداره (تا قبل از C# 8)
یه کلاس میتونه چندین اینترفیس رو پیاده‌سازی کنه
مناسب برای تعریف قراردادهای رفتاری

public interface IShape {
double GetArea();
}

abstract class
میتونه هم تعریف داشته باشه، هم پیاده‌سازی
فقط یه کلاس پایه میتونه ازش ارث بری کنه
میتونه فیلد، سازنده، و متدهای کامل داشته باشه
مناسب برای اشتراک گذاری منطق پایه بین کلاس‌ها

public abstract class Animal {
public abstract void Speak();
public void Eat() {
Console.WriteLine("Eating...");
}
}

📌 نکتهی حرفه‌ای: اگه فقط یه قرارداد رفتاری میخوای، از interface استفاده کن. اگه نیاز به منطق پایه و اشتراک گذاری کد داری، abstract class انتخاب بهتریه.
2👍2
🔁 تفاوت بین override, new, و virtual در سی شارپ — کنترل دقیقتر روی وراثت

اگه با وراثت در سی شارپ کار کرده باشی، حتماً با کلمات کلیدی virtual, override, و new برخورد داشتی. ولی تفاوتشون فقط توی اسم نیست—هرکدوم رفتار متفاوتی در زمان اجرا دارن.

virtual
به متدی در کلاس پایه اجازه میده که قابل بازنویسی باشه
یعنی کلاس‌های فرزند میتونن اون متد رو با override تغییر بدن

public class Animal {
public virtual void Speak() {
Console.WriteLine("Animal sound");
}
}

override
برای بازنویسی متد virtual در کلاس فرزند استفاده میشه
رفتار متد پایه رو تغییر میده

public class Dog : Animal {
public override void Speak() {
Console.WriteLine("Bark");
}
}

new
برای مخفی کردن متد پایه استفاده میشه
یعنی متد جدیدی تعریف میکنی که مستقل از متد پایه عمل میکنه
در زمان اجرای شیء به صورت کلاس پایه، متد پایه اجرا میشه

public class Cat : Animal {
public new void Speak() {
Console.WriteLine("Meow");
}
}

📌 نکتهی حرفه‌ای: اگه میخوای رفتار متد پایه رو تغییر بدی، از override استفاده کن. اگه میخوای متد جدیدی تعریف کنی که مستقل باشه، از new استفاده کن. و برای اینکه متد پایه قابل بازنویسی باشه، باید virtual باشه.

🔗 LinkedIn Post
👍32
📝 String Interpolation در سی شارپ — نوشتن رشته‌ها ساده، خوانا و حرفه‌ای!

یکی از مشکلاتی که خیلی وقت‌ها تو کدنویسی پیش میاد، ترکیب متن و مقادیر متغیره. قبلاً مجبور بودیم با + یا String.Format همه چیزو کنار هم بذاریم، که هم طولانی میشد، هم گاهی کدمون شلوغ و سخت خوانا میشد.
اینجاست که String Interpolation تو سی شارپ به کمک ما میاد! کد رو هم کوتاه‌تر میکنه، هم خواناتر.

چرا String Interpolation جذابه؟
1️⃣خوانایی بیشتر کد: میتونی متغیرها رو مستقیم داخل {} بذاری.
2️⃣کد کوتاه‌تر: نیازی به concat طولانی یا String.Format پیچیده نیست.
3️⃣قابلیت گذاشتن محاسبه و متد داخل {}: یعنی میتونی کارای ساده یا محاسبات رو مستقیم تو رشته داشته باشی.
مثال ساده:

string name = "Hamed";
int age = 20;

Console.WriteLine($"Hi! My name is {name} and I am {age} years old.");
خروجی:
Hi! My name is Hamed and I am 20 years old.

مثال حرفه‌ای‌تر: محاسبه داخل Interpolation

int currentYear = 2025;
int birthYear = 2005;

Console.WriteLine($"Next year, I will be {currentYear - birthYear} years old.");
خروجی:
Next year, I will be 20 years old.
نکات کاربردی:
میتونی فرمت عدد و تاریخ رو هم تو {} مشخص کنی:

double price = 1234.567;
Console.WriteLine($"Product price: {price:C2}");
// C2 برای نمایش به صورت Currency

تو پروژه‌های بزرگ، String Interpolation باعث میشه کد خواناتر و کم خطاتر باشه.
جایگزین عالی برای String.Format هست، مخصوصاً وقتی readability اهمیت داره.

🔗 LinkedIn Post
4👍2
در این هفته قرار از دو پروژه جدید که یکی از اون ها تکمیل شده رونمایی کنیم 🔥

یکی مربوط به ترجمه کتاب هاست.😉
و دیگری هم، دوره های آموزشی رایگان دات نت.😍
👏31👍1
📘 کتاب "C# 12 in a Nutshell" – ترجمه فارسی

بعد از مدت‌ها تلاش، ترجمه کامل این کتاب ارزشمند رو آماده کردم.
این کتاب یکی از جامع‌ترین منابع یادگیری و مرجع زبان سی‌شارپ 12 هست که حالا می‌تونید نسخه فارسی اون رو رایگان از گیت‌هاب بخونید.

🔗 لینک دسترسی:

github.com/hheydarian/csharp-12-in-a-nutshell-persian

امیدوارم به درد علاقه‌مندان دات‌نت و برنامه‌نویس‌های فارسی‌زبان بخوره 💙
11🔥3👨‍💻1🆒1