C# గ్రాండ్ మినీ ప్రాజెక్ట్: ఎంటర్ప్రైజ్ ఎంప్లాయ్ & పేరోల్ మేనేజ్మెంట్ సిస్టమ్
అభినందనలు! 🎓 C# మాస్టర్ కోర్సు చివరి ఘట్టానికి చేరుకున్నారు!
అధ్యాయం 01 లో Anders Hejlsberg చరిత్ర, .NET CLR ఆర్కిటెక్చర్ నుండి ప్రారంభమైన మన ప్రయాణం — డేటా టైప్స్, కంట్రోల్ ఫ్లో, మెథడ్స్, అర్రేలు, కలెక్షన్స్, ఆబ్జెక్ట్ ఓరియెంటెడ్ ప్రోగ్రామింగ్ (OOP), ఇన్హెరిటెన్స్, ఇంటర్ఫేసెస్, రికార్డ్స్, ఎక్సెప్షన్ హ్యాండ్లింగ్, డెలిగేట్స్, ఈవెంట్స్ మరియు LINQ వరకు 19 సుదీర్ఘ మైలురాళ్లను అధిగమించింది.
ఈ 20వ గ్రాండ్ ఫినాలే అధ్యాయంలో మనం నేర్చుకున్న ప్రతి కాన్సెప్ట్ను ఒకే తాటిపైకి తెచ్చి, ఫార్చ్యూన్ 500 ఐటీ కంపెనీలలో వాడే ఎంటర్ప్రైజ్ ఎంప్లాయ్ & పేరోల్ మేనేజ్మెంట్ సిస్టమ్ (Enterprise Employee & Payroll Management System v1.0) ను స్క్రాచ్ నుండి నిర్మిస్తాం. ఈ కోడ్ మీ రెజ్యూమ్లో పెట్టుకోదగిన ఒక అత్యున్నత ప్రాజెక్ట్ ఆర్కిటెక్చర్గా నిలుస్తుంది!
1 🏛️ ప్రాజెక్ట్ ఆర్కిటెక్చర్ & 3-టైర్ లేయర్డ్ డిజైన్
ఒక ప్రొఫెషనల్ సాఫ్ట్వేర్ ఇంజనీర్ ఎప్పుడూ మొత్తం కోడ్ను ఒకే చోట రాసి పడేయరు (Spaghetti Code). మనం మన సిస్టమ్ను 3-టైర్ ఆర్కిటెక్చర్ (3-Tier Layered Architecture) ప్రకారం విభజిస్తాం:
- డొమైన్ & మోడల్స్ లేయర్ (Models): C# 12 Records & Enums (ఉద్యోగులు, డిపార్ట్మెంట్లు, పేరోల్ స్లిప్పుల ఇమ్యుటబుల్ డేటా).
- డేటా పెర్సిస్టెన్స్ లేయర్ (Repository):
IEmployeeRepositoryఇంటర్ఫేస్ మరియుSystem.Text.Jsonబ్యాకప్ ఇంజిన్. - బిజినెస్ లాజిక్ & అనలిటిక్స్ లేయర్ (Services):
PayrollService(LINQ అగ్రిగేషన్స్, టాప్ పర్ఫార్మర్ బోనస్ లెక్కలు, ఈవెంట్ నోటిఫికేషన్లు).
2 📋 డొమైన్ మోడలింగ్ — C# 12 Records & Enums
ఇమ్యుటబుల్ డేటా సేఫ్టీ కోసం మనం C# 9/12 లో వచ్చిన Positional Records ఉపయోగిస్తాం. దీనివల్ల ఆబ్జెక్ట్ పుట్టిన తర్వాత ఎవరూ డేటాను టాంపర్ చేయలేరు:
public enum Department { Engineering, HumanResources, Finance, Marketing, Sales }
public enum EmploymentType { FullTime, Contractor, Intern }
// ఇమ్యుటబుల్ ఎంప్లాయ్ రికార్డ్
public record Employee(
int Id,
string Name,
string Email,
Department Dept,
EmploymentType Type,
decimal MonthlySalary,
int PerformanceRating,
DateTime JoinedDate);
// పేరోల్ స్లిప్ రికార్డ్
public record PaySlip(
string SlipId,
int EmployeeId,
string EmployeeName,
decimal GrossSalary,
decimal Bonus,
decimal Deductions,
decimal NetSalary);
3 🚨 బిజినెస్ రూల్స్ & కస్టమ్ ఎక్సెప్షన్స్
అనుకోని తప్పుడు డేటా వచ్చినప్పుడు సిస్టమ్ క్రాష్ కాకుండా రక్షించడానికి 3 డొమైన్ కస్టమ్ ఎక్సెప్షన్లను డిజైన్ చేస్తాం:
public class DuplicateEmployeeException(int id)
: Exception($"ఉద్యోగి ID #{id} ఇప్పటికే సిస్టమ్లో నమోదై ఉంది!");
public class EmployeeNotFoundException(int id)
: Exception($"ఉద్యోగి ID #{id} సిస్టమ్లో కనుగొనబడలేదు!");
public class InvalidSalaryException(decimal sal)
: Exception($"చెల్లని వేతనం: ₹{sal:N2}. కనీస వేతనం ₹10,000 కంటే ఎక్కువ ఉండాలి.");
4 🔌 రిపోజిటరీ కాంట్రాక్ట్ (`IEmployeeRepository`)
లూజ్ కప్లింగ్ కోసం మనం IEmployeeRepository ఇంటర్ఫేస్ రాస్తాం.
దీనివల్ల భవిష్యత్తులో ఈ కోడ్ను SQL సర్వర్కు గానీ, MongoDB కి గానీ సులభంగా అనుసంధానించవచ్చు:
public interface IEmployeeRepository
{
void Add(Employee emp);
Employee? GetById(int id);
IEnumerable GetAll();
bool Delete(int id);
int TotalCount { get; }
}
5 ⚡ LINQ అనలిటిక్స్ & పేరోల్ బిజినెస్ ఇంజిన్
మాస్టర్ క్లాస్లోని LINQ నైపుణ్యాలను ఉపయోగించి డిపార్ట్మెంట్ స్థాయి ఆర్థిక బడ్జెట్లను లెక్కించడం:
var report = repository.GetAll()
.GroupBy(e => e.Dept)
.Select(g => new
{
Department = g.Key,
HeadCount = g.Count(),
TotalBudget = g.Sum(e => e.MonthlySalary),
AvgSalary = g.Average(e => e.MonthlySalary),
TopEarner = g.OrderByDescending(e => e.MonthlySalary).First()
})
.OrderByDescending(r => r.TotalBudget);
6 📢 ఈవెంట్-డ్రివెన్ ఆర్కిటెక్చర్ — పేరోల్ డిస్బర్స్ అలర్ట్స్
పేరోల్ పూర్తయిన వెంటనే ఫైనాన్స్ మరియు హెచ్ఆర్ విభాగాలకు సమాచారం చేరవేయడానికి
మనం EventHandler<PayrollEventArgs> ను ఉపయోగిస్తాం:
public class PayrollEventArgs(decimal totalDisbursed, int employeeCount) : EventArgs
{
public decimal TotalDisbursed { get; } = totalDisbursed;
public int EmployeeCount { get; } = employeeCount;
public DateTime ProcessedAt { get; } = DateTime.UtcNow;
}
// ఈవెంట్ సబ్స్క్రిప్షన్
payroll.OnPayrollDisbursed += (sender, args) =>
{
Console.WriteLine($"📢 [HR అలర్ట్]: {args.EmployeeCount} మందికి ₹{args.TotalDisbursed:N2} జమ అయ్యాయి!");
};
7 💾 JSON సీరియలైజేషన్ & బ్యాకప్ సిస్టమ్ (`System.Text.Json`)
ఆధునిక C# హై-పెర్ఫార్మెన్స్ లైబ్రరీ System.Text.Json ఉపయోగించి
మొత్తం ఉద్యోగుల డేటాను క్లీన్ JSON ఫార్మాట్లోకి ఎక్స్పోర్ట్ చేస్తాం:
var options = new JsonSerializerOptions { WriteIndented = true };
string jsonBackup = JsonSerializer.Serialize(repository.GetAll(), options);
Console.WriteLine("JSON బ్యాకప్ విజయవంతంగా రూపొందించబడింది.");
8 💻 పూర్తి ప్రొడక్షన్ సోర్స్ కోడ్ — ఎంటర్ప్రైజ్ ఎంప్లాయ్ & పేరోల్ ఇంజిన్
ఈ క్రింది కోడ్ మొత్తం 20 అధ్యాయాల సారాంశాన్ని ఒకే లైవ్ ఎగ్జిక్యూటబుల్ అప్లికేషన్గా ప్రదర్శిస్తుంది:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.WriteLine("=================================================================");
Console.WriteLine("🏢 మన కార్పొరేట్ - ఎంటర్ప్రైజ్ ఎంప్లాయ్ & పేరోల్ మేనేజ్మెంట్ v1.0");
Console.WriteLine("=================================================================\n");
// ==========================================
// 1. డొమైన్ మోడల్స్ (Records & Enums)
// ==========================================
public enum Department { Engineering, HumanResources, Finance, Marketing, Sales }
public enum EmploymentType { FullTime, Contractor, Intern }
public record Employee(
int Id,
string Name,
string Email,
Department Dept,
EmploymentType Type,
decimal MonthlySalary,
int PerformanceRating,
DateTime JoinedDate);
public record PaySlip(
string SlipId,
int EmployeeId,
string EmployeeName,
decimal GrossSalary,
decimal Bonus,
decimal Deductions,
decimal NetSalary);
// ==========================================
// 2. కస్టమ్ డొమైన్ ఎక్సెప్షన్లు
// ==========================================
public class DuplicateEmployeeException(int id)
: Exception($"ఉద్యోగి ID #{id} ఇప్పటికే సిస్టమ్లో నమోదై ఉంది!");
public class EmployeeNotFoundException(int id)
: Exception($"ఉద్యోగి ID #{id} సిస్టమ్లో కనుగొనబడలేదు!");
public class InvalidSalaryException(decimal sal)
: Exception($"చెల్లని వేతనం: ₹{sal:N2}. కనీస వేతనం ₹10,000 కంటే ఎక్కువ ఉండాలి.");
// ==========================================
// 3. ఈవెంట్ ఆర్గ్యుమెంట్స్
// ==========================================
public class PayrollEventArgs(decimal totalDisbursed, int employeeCount) : EventArgs
{
public decimal TotalDisbursed { get; } = totalDisbursed;
public int EmployeeCount { get; } = employeeCount;
public DateTime ProcessedAt { get; } = DateTime.UtcNow;
}
// ==========================================
// 4. రిపోజిటరీ కాంట్రాక్ట్ & ఇంప్లిమెంటేషన్
// ==========================================
public interface IEmployeeRepository
{
void Add(Employee emp);
Employee? GetById(int id);
IEnumerable GetAll();
bool Delete(int id);
int TotalCount { get; }
}
public class InMemoryEmployeeRepository : IEmployeeRepository
{
private readonly Dictionary _store = new();
public void Add(Employee emp)
{
if (_store.ContainsKey(emp.Id)) throw new DuplicateEmployeeException(emp.Id);
if (emp.MonthlySalary < 10000m) throw new InvalidSalaryException(emp.MonthlySalary);
_store[emp.Id] = emp;
}
public Employee? GetById(int id) => _store.TryGetValue(id, out var emp) ? emp : null;
public IEnumerable GetAll() => _store.Values;
public bool Delete(int id) => _store.Remove(id);
public int TotalCount => _store.Count;
}
// ==========================================
// 5. బిజినెస్ లాజిక్ & LINQ పేరోల్ ఇంజిన్
// ==========================================
public class PayrollService(IEmployeeRepository repository)
{
// ఈవెంట్ డిక్లరేషన్
public event EventHandler? OnPayrollDisbursed;
// LINQ అనలిటిక్స్ 1: డిపార్ట్మెంట్ల వారీగా శాలరీ సారాంశం
public void GenerateDepartmentBudgetReport()
{
Console.WriteLine("📊 డిపార్ట్మెంట్ల వారీగా శాలరీ బడ్జెట్ విశ్లేషణ (LINQ GroupBy):");
var report = repository.GetAll()
.GroupBy(e => e.Dept)
.Select(g => new
{
Department = g.Key,
HeadCount = g.Count(),
TotalBudget = g.Sum(e => e.MonthlySalary),
AvgSalary = g.Average(e => e.MonthlySalary),
TopEarner = g.OrderByDescending(e => e.MonthlySalary).First()
})
.OrderByDescending(r => r.TotalBudget);
foreach (var r in report)
{
Console.WriteLine($" • {r.Department,-16} | ఉద్యోగులు: {r.HeadCount,2} | మొత్తం బడ్జెట్: ₹{r.TotalBudget,10:N2} | సగటు: ₹{r.AvgSalary,8:N2} | టాప్: {r.TopEarner.Name} (₹{r.TopEarner.MonthlySalary:N2})");
}
}
// LINQ అనలిటిక్స్ 2: టాప్ పర్ఫార్మర్లకు వార్షిక బోనస్ పంపిణీ
public List ProcessMonthlyPayroll()
{
Console.WriteLine("\n💵 నెలవారీ పేరోల్ ప్రాసెసింగ్ ప్రారంభమైంది...");
var paySlips = new List();
decimal grandTotalDisbursed = 0m;
foreach (var emp in repository.GetAll())
{
// రేటింగ్ 9 లేదా 10 ఉంటే 20% బోనస్, 7 లేదా 8 ఉంటే 10% బోనస్
decimal bonusRate = emp.PerformanceRating switch
{
>= 9 => 0.20m,
>= 7 => 0.10m,
_ => 0.00m
};
decimal bonusAmount = emp.MonthlySalary * bonusRate;
decimal pfDeduction = emp.MonthlySalary * 0.12m; // 12% PF
decimal netSalary = emp.MonthlySalary + bonusAmount - pfDeduction;
var slip = new PaySlip(
"SLIP-" + Guid.NewGuid().ToString().Substring(0, 6).ToUpper(),
emp.Id,
emp.Name,
emp.MonthlySalary,
bonusAmount,
pfDeduction,
netSalary);
paySlips.Add(slip);
grandTotalDisbursed += netSalary;
}
// ఈవెంట్ ఫైరింగ్
OnPayrollDisbursed?.Invoke(this, new PayrollEventArgs(grandTotalDisbursed, paySlips.Count));
return paySlips;
}
// JSON ఎక్స్పోర్ట్
public string ExportToJson()
{
var options = new JsonSerializerOptions { WriteIndented = true };
return JsonSerializer.Serialize(repository.GetAll(), options);
}
}
// ==========================================
// 6. డ్రైవర్ కోడ్ (Main Execution)
// ==========================================
IEmployeeRepository repo = new InMemoryEmployeeRepository();
PayrollService payroll = new PayrollService(repo);
// ఈవెంట్ సబ్స్క్రిప్షన్ (లాంబ్డా తో)
payroll.OnPayrollDisbursed += (sender, args) =>
{
Console.WriteLine($"\n📢 [HR & ఫైనాన్స్ ఈవెంట్ అలర్ట్]:");
Console.WriteLine($" మొత్తం {args.EmployeeCount} మంది ఉద్యోగుల ఖాతాలలో ₹{args.TotalDisbursed:N2} నిధులు జమ చేయబడ్డాయి! (సమయం: {args.ProcessedAt:HH:mm:ss} UTC)");
};
// 7. ఉద్యోగులను చేర్చడం (Seeding Data)
try
{
repo.Add(new Employee(101, "శ్రీధర్ పట్నాయక్", "sridhar@tech.com", Department.Engineering, EmploymentType.FullTime, 95000m, 10, DateTime.Now.AddYears(-3)));
repo.Add(new Employee(102, "లావణ్య దేవి", "lavanya@tech.com", Department.Finance, EmploymentType.FullTime, 75000m, 8, DateTime.Now.AddYears(-2)));
repo.Add(new Employee(103, "రాకేష్ వర్మ", "rakesh@tech.com", Department.Engineering, EmploymentType.FullTime, 120000m, 9, DateTime.Now.AddYears(-4)));
repo.Add(new Employee(104, "సంధ్యా రాణి", "sandhya@tech.com", Department.HumanResources, EmploymentType.FullTime, 65000m, 7, DateTime.Now.AddYears(-1)));
repo.Add(new Employee(105, "వికాస్ నాయుడు", "vikas@tech.com", Department.Marketing, EmploymentType.Contractor, 50000m, 6, DateTime.Now.AddMonths(-8)));
repo.Add(new Employee(106, "కిరణ్ తేజ", "kiran@tech.com", Department.Engineering, EmploymentType.Intern, 25000m, 9, DateTime.Now.AddMonths(-3)));
Console.WriteLine($"✅ {repo.TotalCount} మంది ఉద్యోగులు విజయవంతంగా రిజిస్టర్ అయ్యారు.\n");
}
catch (Exception ex)
{
Console.WriteLine($"❌ ఎర్రర్: {ex.Message}");
}
// 8. డిపార్ట్మెంట్ రిపోర్ట్ రన్ చేయడం
payroll.GenerateDepartmentBudgetReport();
// 9. పేరోల్ ప్రాసెస్ చేయడం
var slips = payroll.ProcessMonthlyPayroll();
// టాప్ 3 జీతం స్లిప్పుల ముద్రణ
Console.WriteLine("\n📄 తాజా శాలరీ స్లిప్పుల నమూనా (టాప్ 3):");
foreach (var slip in slips.OrderByDescending(s => s.NetSalary).Take(3))
{
Console.WriteLine($" [{slip.SlipId}] {slip.EmployeeName,-16} | బేసిక్: ₹{slip.GrossSalary,8:N2} | బోనస్: ₹{slip.Bonus,8:N2} | PF: ₹{slip.Deductions,8:N2} | నెట్: ₹{slip.NetSalary,8:N2}");
}
// 10. ఎక్సెప్షన్ హ్యాండ్లింగ్ డెమో (డూప్లికేట్ ఎంట్రీ రక్షణ)
Console.WriteLine("\n🧪 ఎక్సెప్షన్ హ్యాండ్లింగ్ రక్షణ పరీక్ష:");
try
{
Console.WriteLine("ID #101 తో మళ్లీ ఉద్యోగిని చేర్చడానికి ప్రయత్నిస్తున్నాం...");
repo.Add(new Employee(101, "ఫేక్ యూజర్", "fake@tech.com", Department.Sales, EmploymentType.FullTime, 40000m, 5, DateTime.Now));
}
catch (DuplicateEmployeeException ex)
{
Console.WriteLine($"🛡️ [రక్షణ సఫలం]: {ex.Message}");
}
// 11. JSON ఎక్స్పోర్ట్ ప్రివ్యూ
Console.WriteLine("\n📦 సిస్టమ్ డేటా JSON ఎక్స్పోర్ట్ ప్రివ్యూ (మొదటి ఉద్యోగి):");
var jsonString = payroll.ExportToJson();
Console.WriteLine(jsonString.Substring(0, Math.Min(350, jsonString.Length)) + "\n ...");
Console.WriteLine("\n=================================================================");
Console.WriteLine("🎉 అభినందనలు! C# మాస్టర్ కోర్సు 20 అధ్యాయాలు సంపూర్ణంగా ముగిశాయి! 🚀");
Console.WriteLine("=================================================================");
💻 ఈ గ్రాండ్ ఫినాలే ప్రాజెక్ట్ను ఆన్లైన్ కంపైలర్లో రన్ చేయండి!
Records, Interfaces, Repositories, LINQ GroupBy, Custom Exceptions మరియు JSON Serialization యొక్క సంపూర్ణ సమన్వయాన్ని వీక్షించండి.
9 🔍 కోడ్ వాక్త్రూ & ఆర్కిటెక్చరల్ నిర్ణయాలు
ఈ ప్రాజెక్ట్లో మనం తీసుకున్న కీలక ఆర్కిటెక్చరల్ నిర్ణయాలు:
- Records: మల్టీ-థ్రెడింగ్ ఎన్విరాన్మెంట్లో డేటా మ్యుటేట్ అవ్వకుండా ఇమ్యుటబుల్ సేఫ్టీ ఇచ్చింది.
- IEmployeeRepository: బిజినెస్ లాజిక్ను డేటాబేస్ నుండి డీకపుల్ చేసింది. రేపు SQL లేదా Entity Framework Core కి మారడం సులభం.
- LINQ GroupBy & Aggregations: ఎలాంటి సంక్లిష్టమైన ఫర్-లూప్స్ లేకుండా డిపార్ట్మెంట్ స్థాయి ఆర్థిక నివేదికలను 4 లైన్లలో రూపొందించింది.
10 🚀 తదుపరి అడుగులు — C# డెవలపర్గా మీ కెరీర్ రోడ్మ్యాప్
ఈ 20 అధ్యాయాలతో మీరు C# మరియు .NET 8 లో బలమైన పునాదిని నిర్మించుకున్నారు. ఒక పూర్తి స్థాయి ఫుల్-స్టాక్ లేదా బ్యాకెండ్ సాఫ్ట్వేర్ ఇంజనీర్గా ఎదగడానికి మీ తదుపరి అడుగులు:
- ASP.NET Core Web API: RESTful APIs, Controllers, Minimal APIs, JWT Authentication నేర్చుకోవడం.
- Entity Framework Core (EF Core): SQL Server / PostgreSQL డేటాబేస్లతో ORM ద్వారా సంభాషించడం.
- Microservices & Docker: అప్లికేషన్లను కంటైనరైజ్ చేసి Azure Kubernetes Service (AKS) లో డిప్లాయ్ చేయడం.
- Cloud Azure: Azure Functions, Azure Service Bus, Blob Storage తో క్లౌడ్ నేటివ్ యాప్స్ తయారు చేయడం.
11 🏆 20 అధ్యాయాల సారాంశం (Summary of the Entire Journey)
| ఫేజ్ | కవర్ చేసిన ప్రధానాంశాలు | సాధించిన నైపుణ్యం |
|---|---|---|
| Phase 01 (Ch 01-04) | .NET ఆర్కిటెక్చర్, వేరియబుల్స్, CTS, I/O, ఆపరేటర్లు, Null-Coalescing | C# ఫండమెంటల్స్ & సింటాక్స్ పట్టు |
| Phase 02 (Ch 05-08) | if-else, Pattern Matching, Switch Expressions, లూప్స్, 2D గ్రిడ్స్ | లాజిక్ బిల్డింగ్ & కంట్రోల్ ఫ్లో ప్రావీణ్యం |
| Phase 03 (Ch 09-12) | Methods, ref/out/in/params, StringBuilder, అర్రేలు, List/Dictionary | మెమరీ ఆప్టిమైజేషన్ & డేటా స్ట్రక్చర్స్ |
| Phase 04 (Ch 13-16) | OOP, Primary Constructors, Encapsulation, Inheritance, Interfaces, Records | సాఫ్ట్వేర్ ఆర్కిటెక్చర్ & ఎంటర్ప్రైజ్ డిజైన్ |
| Phase 05 (Ch 17-20) | Exception Handling, Delegates, Events, Lambda, LINQ, Complete Mini Project | ప్రొడక్షన్ రెడీనెస్ & రియల్-వరల్డ్ ఇంజనీరింగ్ |
12 🎓 ఫైనల్ గ్రాండ్ క్విజ్ — 5 సమగ్ర ప్రశ్నలు
మీ C# మాస్టరీని పరీక్షించుకోండి:
❓ ప్రశ్న 1: DTOs మరియు ఇమ్యుటబుల్ డేటా మోడల్స్ కోసం సాధారణ Class కంటే Record ఎందుకు శ్రేష్టం?
with ఎక్స్ప్రెషన్ను మరియు క్లీన్ సింగిల్-లైన్ ప్రైమరీ కన్స్ట్రక్టర్లను అందిస్తాయి. దీనివల్ల 50 లైన్ల బాయిలర్ప్లేట్ కోడ్ తగ్గుతుంది.
❓ ప్రశ్న 2: LINQ లో డేటాను కేటగిరీల వారీగా వర్గీకరించడానికి ఏ మెథడ్ వాడాలి?
.GroupBy() (ఉదాహరణ: employees.GroupBy(e => e.Dept)).
❓ ప్రశ్న 3: ఎక్సెప్షన్ హ్యాండ్లింగ్లో కాల్ స్టాక్ నష్టం జరగకుండా రీ-త్రో చేయడానికి ఏది సరైన విధానం?
throw; మాత్రమే వాడాలి. throw ex; వాడితే కాల్ స్టాక్ రీసెట్ అయి అసలైన బగ్ లైన్ పోతుంది.
❓ ప్రశ్న 4: IEmployeeRepository వంటి ఇంటర్ఫేస్ను వాడటం వల్ల కలిగే అతిపెద్ద ప్రయోజనం ఏమిటి?
❓ ప్రశ్న 5: C# లో అన్మేనేజ్డ్ రీసోర్సెస్ను ఆటోమేటిక్గా క్లీన్ చేయడానికి ఏ కీవర్డ్ వాడతాం?
using స్టేట్మెంట్ లేదా డిక్లరేషన్ (ఇది అంతర్గతంగా try-finally లో Dispose() ని రన్ చేస్తుంది).
13 🌟 కోర్సు పూర్తి సర్టిఫికేషన్ మెసేజ్
🎉 హృదయపూర్వక అభినందనలు!
మీరు "Our Compiler — Modern C# & .NET 8 Masterclass (తెలుగు)" లోని మొత్తం 20 అధ్యాయాలను (8.8 లక్షల అక్షరాల లోతైన కంటెంట్ను) విజయవంతంగా పూర్తి చేశారు! మీరు ఇప్పుడు C# లో ఎంటర్ప్రైజ్-గ్రేడ్ సాఫ్ట్వేర్ నిర్మించడానికి అవసరమైన సంపూర్ణ సాంకేతిక పరిజ్ఞానాన్ని కలిగి ఉన్నారు.
⚡ C# Course Home (పూర్తి సిలబస్ ఇండెక్స్) కు వెళ్లండి