C# 12.0 - Primary Constructors
نویسنده: وحید نصیری
تاریخ: ۱۴۰۲/۰۹/۰۶ ۱۴:۳۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class Employee
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime HireDate { get; set; }
public decimal Salary { get; set; }
public Employee(string firstName, string lastName, DateTime hireDate, decimal salary)
{
FirstName = firstName;
LastName = lastName;
HireDate = hireDate;
Salary = salary;
}
} public class Employee(string firstName, string lastName, DateTime hireDate, decimal salary)
{
public string FirstName { get; set; } = firstName;
public string LastName { get; set; } = lastName;
public DateTime HireDate { get; set; } = hireDate;
public decimal Salary { get; set; } = salary;
} var employee = new Employee("John", "Doe", new DateTime(2020, 1, 1), 50000);
public record class Book(string Title, string Publisher);
public record struct Color(int R, int G, int B);
public class MyService
{
private readonly IDepedent _dependent;
public MyService(IDependent dependent)
{
_dependent = dependent;
}
public void Do()
{
_dependent.DoWork();
}
} public class MyService(IDependent dependent)
{
public void Do()
{
dependent.DoWork();
}
} using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
namespace CS8Tests
{
[NullableContext(1)]
[Nullable(0)]
public class Employee
{
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private string <FirstName>k__BackingField;
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private string <LastName>k__BackingField;
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private DateTime <HireDate>k__BackingField;
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private Decimal <Salary>k__BackingField;
public Employee(string firstName, string lastName, DateTime hireDate, Decimal salary)
{
this.<FirstName>k__BackingField = firstName;
this.<LastName>k__BackingField = lastName;
this.<HireDate>k__BackingField = hireDate;
this.<Salary>k__BackingField = salary;
base..ctor();
}
public string FirstName
{
[CompilerGenerated] get
{
return this.<FirstName>k__BackingField;
}
[CompilerGenerated] set
{
this.<FirstName>k__BackingField = value;
}
}
public string LastName
{
[CompilerGenerated] get
{
return this.<LastName>k__BackingField;
}
[CompilerGenerated] set
{
this.<LastName>k__BackingField = value;
}
}
public DateTime HireDate
{
[CompilerGenerated] get
{
return this.<HireDate>k__BackingField;
}
[CompilerGenerated] set
{
this.<HireDate>k__BackingField = value;
}
}
public Decimal Salary
{
[CompilerGenerated] get
{
return this.<Salary>k__BackingField;
}
[CompilerGenerated] set
{
this.<Salary>k__BackingField = value;
}
}
}
} public class Person(string firstName, string lastName)
{
public Person() : this("John", "Smith") { }
public Person(string firstName) : this(firstName, "Smith") { }
public string FullName => $"{firstName} {lastName}";
} public class User
{
public User(string firstName, string lastName) { }
}
public class Editor(string firstName, string lastName) : User
{
} public class Automobile
{
public Automobile(int wheels, int seats)
{
Wheels = wheels;
Seats = seats;
}
public int Wheels { get; }
public int Seats { get; }
}
public class Car : Automobile
{
public Car(int seats) : base(4, seats)
{
}
} public class Automobile(int wheels, int seats)
{
public int Wheels { get; } = wheels;
public int Seats { get; } = seats;
}
public class Car(int seats) : Automobile(4, seats); public class MyBaseClass(string s); // no body required
public class Derived(int i, string s, bool b) : MyBaseClass(s)
{
public int I { get; set; } = i;
public string B => b.ToString();
} public class Human(int age)
{
// initialization
public int Age { get; set; } = age;
// capture
public string Bio => $"My age is {age}!";
} var p = new Human(42); Console.WriteLine(p.Age); // Output: 42 Console.WriteLine(p.Bio); // Output: My age is 42! p.Age++; Console.WriteLine(p.Age); // Output: 43 Console.WriteLine(p.Bio); // Output: My age is 42! // !
using System.Diagnostics;
using System.Runtime.CompilerServices;
namespace CS8Tests
{
[NullableContext(1)]
[Nullable(0)]
public class Human
{
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private int <age>P;
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private int <Age>k__BackingField;
public Human(int age)
{
this.<age>P = age;
this.<Age>k__BackingField = this.<age>P;
base..ctor();
}
public int Age
{
[CompilerGenerated] get
{
return this.<Age>k__BackingField;
}
[CompilerGenerated] set
{
this.<Age>k__BackingField = value;
}
}
public string Bio
{
get
{
DefaultInterpolatedStringHandler interpolatedStringHandler = new DefaultInterpolatedStringHandler(11, 1);
interpolatedStringHandler.AppendLiteral("My age is ");
interpolatedStringHandler.AppendFormatted<int>(this.<age>P);
interpolatedStringHandler.AppendLiteral("!");
return interpolatedStringHandler.ToStringAndClear();
}
}
}
} public Human(int age)
{
this.<age>P = age;
this.<Age>k__BackingField = this.<age>P;
base..ctor();
} private string <FirstName>k__BackingField;
public class AbcController : Controller
{
private readonly IMyService _myService;
public AbcController(IMyService myService) {
_myService = myService;
}
} public class MyController(IMyService _myService) : ControllerBase
{
[HttpGet]
public IActionResult RandomNumber()
{
var number = _myService.RandomNumber();
_myService = null;
var number2 = MyRandom();
return Ok(number + number2);
}
public int MyRandom()
{
return _myService.RandomNumber();
}
} public class MyBaseClass(string s); // no body required
class Foo; struct Bar; interface IFoo;
class Employee(string firstName, string lastName)
{
private readonly string _firstName = firstName.Length >= 5 ?
firstName :
throw new ArgumentException("There must be atleast 5 characters");
private readonly string _lastName = lastName;
public string FullName()
{
return $"Full name = {_firstName} {_lastName}";
}
}