Говорят, что экземпляр производного класса, наследующийся от абстрактного (класса, интерфейса), принято приводить к базовому типу. Почти всегда.
var instance = new DerivedClass();
instance.Method1(); // Красиво, компактно, никаких проблем.
instance.Method2();
В коде выше, из за приведения к базовому абстрактному типу, мы вынуждены создавать 2 экземпляра класса.
DerivedClass instance= new DerivedClass(); // только 1 экземпляр
Interface1 instance1 = instance; // Но всё равно очень громоздко.
Interface2 instance2 = instance;
Не нужна "лишняя" операция приведения (апкаст).
private Dictionary<string, Item> Inventory = new () {
["Дробовик"] = new () { Damage = 36, Clip = 30, Stock = 60 },
["Автомат"] = new () { Damage = 30, Clip = 30, Stock = 60 },
["Базука"] = new () { Damage = 51, Clip = 1, Stock = 2 }
};
public Item SelectedItem {get; set;}
private void timer1_Tick(object sender, EventArgs e) {
SelectedItem = Inventory[combobox.Text];
}
label1.Text = SelectedItem?.Clip.ToString() ?? "";
Правильно ли я делаю?
Нет ли ошибок?
Как можно защититься от инъекции?
Например, в php экранировали вводимую пользователем форму например htmlspecialchars, надо ли на net core так же делать?
sealed override string ToString()
InputField input = ...;
int number = int.Parse(input.text); // если в input.text будет лежать не число, то будет FormatException
InputField input = ...;
if(int.TryParse(input.text, out var number) {
// используем number. В этом случае FormatException не выпадет, но тогда будет возникать ощущение, будто ничего не работает.
}
str = int.Parse(inf_ot.text);
str2= int.Parse(inf_do.text);
public void Random()
{
str += str2 = otv; // Не будет работать, либо будет работать не так, как вам нужно.
}
public RestClient(Uri baseUrl, JsonSerializer serializer, IWebProxy proxy = null)
{
BaseUrl = baseUrl;
Serializer = serializer;
DefaultQueryString = new List<KeyValuePair<string, string>>();
MaxRetryCount = 0;
Proxy = proxy;
HttpClient = new HttpClient(new HttpClientHandler
{
Proxy = proxy // Вот из-за этой строчки происходит падение.
});
}
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
SQLiteCommand cmd = new SQLiteCommand($"SELECT Name FROM users WHERE Login = '{LoginField.Text}'", load);
SQLiteCommand comand = new SQLiteCommand($"SELECT Surname FROM users WHERE Login = '{LoginField.Text}'", load);
SQLiteCommand command = new SQLiteCommand($"SELECT Image FROM users WHERE Login = '{LoginField.Text}'", load);
SQLiteDataReader Reader = cmd.ExecuteReader();
SQLiteDataReader Readr = comand.ExecuteReader();
SQLiteDataReader reader = command.ExecuteReader();
using System;
using System.Data;
using System.Data.SQLite;
using var connection = new SQLiteConnection("Data source = accounts.db");
connection.Open();
using var cmd = new SQLiteCommand("SELECT Name, Surname, Image FROM users WHERE Login = @Login", connection)
{
// Параметры используются, чтобы защититься от SQL-инъекций
Parameters =
{
new SQLiteParameter("@Login", "test") // то значение, которое должно быть подставлено вместо @Login
}
};
using var reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
var name = reader.GetString("Name");
var surname = reader.GetString("Surname");
var image = reader.IsDBNull("Image")
? null
: Convert.FromBase64String(reader.GetString("Image"));
connection.Close();
// Делаем с name, surname и image что хотим
int x, y;
var quadrant = x > 0
? y > 0
? "I"
: "IV"
: y > 0
? "II"
: "III"
int x, y;
var quadrant = (x, y) switch {
(>0, >0) => "I",
(>0, <0) => "IV",
(<0, >0) => "II",
(<0, <0) => "III",
_ => "Точка находится на одной из осей"
}
Мне интересно в чем различие бэка на C# и Node js.
И C# сейчас для Web'a уместен ли вообще?