Rilasciato · in miglioramento
Guida a C# · 2/6
Per ora questo capitolo è disponibile solo in inglese.
This chapter covers the everyday building blocks of C#: variables, methods, control flow, string interpolation, and the namespaces that organize your code. If you have written C, Java, or JavaScript, most of the syntax will feel familiar right away.
C# is statically typed, so every variable's type is fixed at compile time. You can spell the type out, or use var and let the compiler infer it from the right-hand side. Either way the type is locked in; var is not a dynamic type.
int count = 10;
double price = 19.99;
string title = "Learning C#";
bool isActive = true;
var total = count * price; // inferred as double
var names = new List<string>(); // inferred as List<string>
const int MaxRetries = 3; // compile-time constant
count += 5; // variables can be reassigned
// MaxRetries = 4; // error: constants cannot changeBy convention, locals and parameters use camelCase, while methods, properties, types, and constants use PascalCase. Statements end with a semicolon.
A method declaration lists a return type, a name, and parameters; use void when nothing is returned. When the body is a single expression, the => arrow form keeps it short.
static int Add(int a, int b)
{
return a + b;
}
static int Square(int x) => x * x;
// optional parameter with a default value
static string Greet(string name, string greeting = "Hello")
=> $"{greeting}, {name}!";
Console.WriteLine(Add(2, 3)); // 5
Console.WriteLine(Square(4)); // 16
Console.WriteLine(Greet("Sam")); // Hello, Sam!
Console.WriteLine(Greet(greeting: "Hi", name: "Jo")); // named argumentsMethods declared in a top-level statements file become local functions inside the generated entry point. Inside a class, a static method belongs to the type itself, while a method without static belongs to each instance. Methods can also hand back extra values through out parameters; int.TryParse is the classic example.
Conditionals and loops look just like other curly-brace languages. On top of that, C# offers switch expressions and pattern matching for compact branching.
int score = 87;
if (score >= 90)
Console.WriteLine("A");
else if (score >= 80)
Console.WriteLine("B");
else
Console.WriteLine("C or below");
string grade = score switch
{
>= 90 => "A",
>= 80 => "B",
>= 70 => "C",
_ => "F",
};
for (int i = 0; i < 3; i++)
Console.WriteLine($"for: {i}");
foreach (var fruit in new[] { "apple", "pear", "plum" })
Console.WriteLine($"foreach: {fruit}");
int n = 0;
while (n < 3)
{
n++;
if (n == 2) continue; // skip to the next iteration
Console.WriteLine($"while: {n}");
}The _ arm in a switch expression is the catch-all, and the compiler warns you if some inputs are left unhandled. The is operator matches patterns too: if (value is int number && number > 0) checks the type, converts, and tests the value in one go.
Prefix a string with $ to embed expressions in braces. A format specifier after a colon controls how numbers and dates are rendered.
var item = "Keyboard";
var unitPrice = 49.90m;
var quantity = 2;
Console.WriteLine($"{quantity} x {item}: {unitPrice * quantity:C}");
Console.WriteLine($"Ratio: {0.256:P1}"); // 25.6%
Console.WriteLine($"|{item,-10}|{quantity,5}|"); // left and right alignment
var path = @"C:\data\report.txt"; // verbatim string: backslashes stay as-is
var json = """
{ "name": "TASTEDEV", "ok": true }
"""; // raw string literalThe m suffix makes a decimal, the right type for money. The C format uses the current culture's currency format, so its output depends on the machine. Raw string literals, delimited by three double quotes, need no escaping for quotes or backslashes, which makes them ideal for embedded JSON or SQL.
Namespaces group types so their names don't collide. Writing namespace Name; at the top of a file places every type in that file inside the namespace (a file-scoped namespace). To use types from another namespace, import it with a using directive.
// Models/Order.cs
namespace Shop.Models;
public class Order
{
public int Id { get; set; }
}// Program.cs
using System.Text;
using Shop.Models;
var order = new Order { Id = 42 };
var builder = new StringBuilder();
builder.Append("Order number: ").Append(order.Id);
Console.WriteLine(builder.ToString());With ImplicitUsings enabled you never have to write out namespaces like System, System.Collections.Generic, or System.Linq. To make your own import available project-wide, add a line such as global using Shop.Models; to any one file.
var; either way, the type is fixed at compile time.=>, and callers can use optional and named arguments.if, for, foreach, and while, switch expressions and pattern matching keep branching concise.$"..." interpolation with format specifiers shapes output, and raw string literals hold multi-line text verbatim.using brings in types from other namespaces.
0 commenti
Accedi · Accedi per lasciare un commento.
Scrivi tu il primo commento.