День девяносто девятый. #ЧтоНовенького
Новинки VS2019 для Повышения Продуктивности
6. Просмотр содержимого Циклической Вставки
Каждый раз, когда вы копируете (
В Visual Studio 2019 Циклическая Вставка теперь показывает всплывающее окно визуального предпросмотра содержимого при нажатии
Новинки VS2019 для Повышения Продуктивности
6. Просмотр содержимого Циклической Вставки
Каждый раз, когда вы копируете (
Ctrl+C
) что-то в Visual Studio, скопированное попадает в Циклическую Вставку. Нажатие Ctrl+Shift+V
позволяет вам проходить по элементам циклической вставки и вставлять выбранный элемент. Бывает очень полезно хранить несколько элементов в буфере обмена одновременно, а затем вставлять их в нужных местах.В Visual Studio 2019 Циклическая Вставка теперь показывает всплывающее окно визуального предпросмотра содержимого при нажатии
Ctrl+Shift+V
. Это упрощает навигацию по истории скопированных элементов и выбор нужного элемента для вставки.День сотый. #Оффтоп
В праздники не получается ни работать, ни особо учится (хотя планов подтянуть то да сё всегда полно). Поэтому чтобы время вдали от компа не тратить попусту, начал читать эту книженцию прямо с телефона. В ней советы по профессиональному росту. Далеко не все подходят для России, и, по собственному опыту скажу, что далеко не всегда начальство по заслугам оценит ваше рвение. Но многие советы дельные и вполне универсальные для всех.
В праздники не получается ни работать, ни особо учится (хотя планов подтянуть то да сё всегда полно). Поэтому чтобы время вдали от компа не тратить попусту, начал читать эту книженцию прямо с телефона. В ней советы по профессиональному росту. Далеко не все подходят для России, и, по собственному опыту скажу, что далеко не всегда начальство по заслугам оценит ваше рвение. Но многие советы дельные и вполне универсальные для всех.
День сто первый.
Понимаю, что многие ко мне, возможно, пришли с канала CodeBlog. Но всё-таки не могу не поделиться последним стримом про IT сертификацию, в частности про сертификацию в Microsoft. Автор канала к лету планирует пройти сертификацию по C#, так же, как и я. Обещает отдельную серию видео про это ближе к лету. Буду ждать.
https://www.youtube.com/watch?v=S3b-Lwljjew
Понимаю, что многие ко мне, возможно, пришли с канала CodeBlog. Но всё-таки не могу не поделиться последним стримом про IT сертификацию, в частности про сертификацию в Microsoft. Автор канала к лету планирует пройти сертификацию по C#, так же, как и я. Обещает отдельную серию видео про это ближе к лету. Буду ждать.
https://www.youtube.com/watch?v=S3b-Lwljjew
YouTube
IT сертификация. А нужна ли программисту? - Основы программирования
IT сертификация - частое требование некоторых работодателей. Но есть ли от нее реальная польза и является она показателем уровня знаний программиста? Об этом и поговорим в этом видео.
Я поделюсь своим опытом сдачи сертификации Microsoft и расскажу, нужны…
Я поделюсь своим опытом сдачи сертификации Microsoft и расскажу, нужны…
This media is not supported in your browser
VIEW IN TELEGRAM
День сто второй. #ЧтоНовенького
В последнее время всё большую популярность набирают системы машинного обучения. Теперь и в .NET появилась возможность создавать подобные приложения. Недавно был выпущен ML.NET 1.0. Это бесплатный кросс-платфоменный фреймворк с открытым кодом, разработанный для поддержки машинного обучения в приложениях .NET.
ML.NET позволяет создавать модели машинного обучения, используя C# или F# в таких сценариях, как анализ мнений, классификация проблем, прогнозирование, рекомендации и многое другое.
ML.NET был изначально разработан внутри Microsoft Research, и эволюционировал в важный фреймворк, используемый многими продуктами Microsoft, такими как Windows Defender, Microsoft Office, Azure Machine Learning, PowerBI и др.
Помимо релиза ML.NET 1.0 в качестве предрелизных версий выпущены такие инструменты как Automated machine learning (AutoML), ML.NET CLI и ML.NET Model Builder, которые делают построение моделей машинного обучения простым как нажатие правой кнопки мыши!
http://dot.net/ml
В последнее время всё большую популярность набирают системы машинного обучения. Теперь и в .NET появилась возможность создавать подобные приложения. Недавно был выпущен ML.NET 1.0. Это бесплатный кросс-платфоменный фреймворк с открытым кодом, разработанный для поддержки машинного обучения в приложениях .NET.
ML.NET позволяет создавать модели машинного обучения, используя C# или F# в таких сценариях, как анализ мнений, классификация проблем, прогнозирование, рекомендации и многое другое.
ML.NET был изначально разработан внутри Microsoft Research, и эволюционировал в важный фреймворк, используемый многими продуктами Microsoft, такими как Windows Defender, Microsoft Office, Azure Machine Learning, PowerBI и др.
Помимо релиза ML.NET 1.0 в качестве предрелизных версий выпущены такие инструменты как Automated machine learning (AutoML), ML.NET CLI и ML.NET Model Builder, которые делают построение моделей машинного обучения простым как нажатие правой кнопки мыши!
http://dot.net/ml
День сто третий. #ЗаметкиНаПолях
Метод nameof
Метод
1. Валидация параметров:
Аргументом для
Так как аргумент должен быть синтаксическим выражением, существует несколько запрещенных элементов:
- предопределенные типы (например,
- обнуляемые типы (
- массивы (
- указатели (
- полные псевдонимы (
- несвязанные универсальные типы (Dictionary<,>),
- идентификаторы препроцессора (
- метки (
Сведения о сигнатурах, например "
Источник: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/nameof
Метод nameof
Метод
nameof
используется для получения простого строкового имени переменной, типа или члена типа. Например:string text;Примеры Использования
WriteLine(nameof(text)); // "text"
WriteLine(nameof(person.Address.ZipCode)); // "ZipCode"
1. Валидация параметров:
void f(string s) {2. Ссылки ActionLink в MVC:
if (s == null) throw new ArgumentNullException(nameof(s));
}
<%= Html.ActionLink("Sign up",3. Реализация INotifyPropertyChanged:
@typeof(UserController),
@nameof(UserController.SignUp))
%>
int p {4. DependencyProperty в XAML:
get { return this.p; }
set { this.p = value; PropertyChanged(this, new PropertyChangedEventArgs(nameof(p)); }
}
public static DependencyProperty AgeProperty = DependencyProperty.Register(nameof(Age), typeof(int), typeof(C));5. Запись в журнал:
void f(int i) {6. Атрибуты:
Log(nameof(f), "method entry");
}
[DebuggerDisplay("={" + nameof(GetString) + "()}")]Примечания
class C {
string GetString() { }
}
Аргументом для
nameof
должно быть простое имя, полное имя, доступ к членам, базовый доступ с заданным членом или доступ к this
с указанным членом. Выражение аргумента идентифицирует определение кода, но никогда не вычисляется.Так как аргумент должен быть синтаксическим выражением, существует несколько запрещенных элементов:
- предопределенные типы (например,
int
или void
),- обнуляемые типы (
Point?
),- массивы (
Customer[,]
),- указатели (
Buffer*
),- полные псевдонимы (
A::B
)- несвязанные универсальные типы (Dictionary<,>),
- идентификаторы препроцессора (
DEBUG
),- метки (
loop:
).Сведения о сигнатурах, например "
Method1 (str, str)
", получить невозможно. Чтобы это сделать, можно использовать выражение (Expression e = () => A.B.Method1("s1", "s2"))
и извлечь MemberInfo
из результирующего дерева выражения.Источник: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/nameof
День сто четвёртый. #TipsAndTricks
Использование Списка Задач (Task List). Начало
Используйте Список Задач для отслеживания комментариев, включающих ключевые слова, такие как
Открыть окно Списка Задач можно через меню Вид > Список Задач (View > Task List), либо нажав
В окне списка задач можно отсортировать список, нажав на заголовок столбца. Удерживая
Источник: https://docs.microsoft.com/en-us/visualstudio/ide/using-the-task-list
Использование Списка Задач (Task List). Начало
Используйте Список Задач для отслеживания комментариев, включающих ключевые слова, такие как
TODO
, BUG
или HACK
, либо собственные ключевые слова, а также создавайте ярлыки, чтобы быстро переходить к нужной строке кода.Открыть окно Списка Задач можно через меню Вид > Список Задач (View > Task List), либо нажав
Ctrl+\,T
.В окне списка задач можно отсортировать список, нажав на заголовок столбца. Удерживая
Shift
, можно добавлять столбцы к сортировке. Также можно добавлять и удалять столбцы через выпадающее меню "Показать Столбцы" (Show Columns). Порядок столбцов можно менять перетаскиванием их за заголовок. Начиная с VS 2017 можно производить поиск по списку задач в поле в правом верхнем углу окна, а также фильтровать по местоположению задач (Всё решение/Текущий проект/Открытые документы/Текущий документ).Источник: https://docs.microsoft.com/en-us/visualstudio/ide/using-the-task-list
День сто пятый. #TipsAndTricks
Использование Списка Задач (Task List). Продолжение
Токены и комментарии
В список задач попадают комментарии из вашего кода, помеченные специальными токенами:
1. Откройте настройки из меню Tools > Options, выберите Task List из папки Environment.
2. Введите имя токена в поле Name, например,
Источник: https://docs.microsoft.com/en-us/visualstudio/ide/using-the-task-list
Использование Списка Задач (Task List). Продолжение
Токены и комментарии
В список задач попадают комментарии из вашего кода, помеченные специальными токенами:
// TODO: текст комментарияПо умолчанию в Visual Studio включены следующие токены:
HACK
, TODO
, UNDONE
и UnresolvedMergeConflict
. Они регистронезависимы. Кроме того вы можете создавать свои токены: 1. Откройте настройки из меню Tools > Options, выберите Task List из папки Environment.
2. Введите имя токена в поле Name, например,
BUG
. Выберите приоритет из выпадающего списка Priority и нажмите Add.Источник: https://docs.microsoft.com/en-us/visualstudio/ide/using-the-task-list
День сто шестой. #TipsAndTricks
Использование Списка Задач (Task List). Окончание
Ярлыки
Ярлык – это закладка в коде, которая отслеживается в Списке Задач. Иконка ярлыка отличается от обычной закладки. Двойной щелчок на строке ярлыка в Списке Задач откроет соответствующий файл и строку кода.
Чтобы создать ярлык, встаньте на нужную строку кода, выберите в меню Edit > Bookmarks > Add Task List Shortcut (Правка > Закладки > Добавить Ярлык Списка Задач) или нажмите
Для перемещения по ярлыкам в коде выберите ярлык в Списке Задач, а затем выберите Next Task (Следующая Задача) или Previous Task (Предыдущая Задача) из выпадающего меню.
Источник: https://docs.microsoft.com/en-us/visualstudio/ide/using-the-task-list
Использование Списка Задач (Task List). Окончание
Ярлыки
Ярлык – это закладка в коде, которая отслеживается в Списке Задач. Иконка ярлыка отличается от обычной закладки. Двойной щелчок на строке ярлыка в Списке Задач откроет соответствующий файл и строку кода.
Чтобы создать ярлык, встаньте на нужную строку кода, выберите в меню Edit > Bookmarks > Add Task List Shortcut (Правка > Закладки > Добавить Ярлык Списка Задач) или нажмите
Ctrl+K, Ctrl+H
.Для перемещения по ярлыкам в коде выберите ярлык в Списке Задач, а затем выберите Next Task (Следующая Задача) или Previous Task (Предыдущая Задача) из выпадающего меню.
Источник: https://docs.microsoft.com/en-us/visualstudio/ide/using-the-task-list
День сто седьмой. #ЗаметкиНаПолях
LINQ. Начало
LINQ предоставляет возможности выполнения запросов на уровне языка и API функции высшего порядка для написания выразительного и декларативного кода.
Варианты использования:
1. Запрос:
Поэтому использовать синтаксис запроса имеет смысл, если
- в существующей базе кода уже используется синтаксис запроса;
- необходимо объявить переменные внутри запроса;
- вы предпочитаете синтаксис запросов, который не отвлекает внимание от остального кода.
Преимущества LINQ
1. Выразительность
Код, использующий LINQ, является весьма удобным, так как он создает равные условия как для достижения цели, как и для написания кода, сохраняя при этом логику. Еще одним преимуществом является краткость кода. Большие части базы кода можно сократить на треть.
2. Упрощение доступа к данным
Использование значительной части существующего ПО связано с обработкой данных из определенного источника (баз данных, JSON, XML и т. д.). Часто для этого требуется изучать новый API по каждому источнику данных. LINQ упрощает эту задачу путем абстрагирования общих элементов доступа к данным в синтаксис запросов, который имеет один и тот же вид независимо от выбираемого источника данных.
Продолжение следует…
Источник: https://docs.microsoft.com/en-us/dotnet/standard/using-linq
LINQ. Начало
LINQ предоставляет возможности выполнения запросов на уровне языка и API функции высшего порядка для написания выразительного и декларативного кода.
Варианты использования:
1. Запрос:
var linqExperts = from p in programmers2. API интерфейса IEnumerable<T>:
where p.IsNewToLINQ
select new LINQExpert(p);
var linqExperts = programmersСинтаксис API обычно более лаконичен. Однако иногда имеет смысл использовать синтаксис запроса. Он позволяет использовать предложение let, которое дает возможность объявить и инициализировать переменную в области выражения и применять ее в последующих частях выражения. Аналогичный API-код, скорее всего, будет трудночитаемым.
.Where(p => p.IsNewToLINQ)
.Select(p => new LINQExpert(p));
Поэтому использовать синтаксис запроса имеет смысл, если
- в существующей базе кода уже используется синтаксис запроса;
- необходимо объявить переменные внутри запроса;
- вы предпочитаете синтаксис запросов, который не отвлекает внимание от остального кода.
Преимущества LINQ
1. Выразительность
Код, использующий LINQ, является весьма удобным, так как он создает равные условия как для достижения цели, как и для написания кода, сохраняя при этом логику. Еще одним преимуществом является краткость кода. Большие части базы кода можно сократить на треть.
2. Упрощение доступа к данным
Использование значительной части существующего ПО связано с обработкой данных из определенного источника (баз данных, JSON, XML и т. д.). Часто для этого требуется изучать новый API по каждому источнику данных. LINQ упрощает эту задачу путем абстрагирования общих элементов доступа к данным в синтаксис запросов, который имеет один и тот же вид независимо от выбираемого источника данных.
Продолжение следует…
Источник: https://docs.microsoft.com/en-us/dotnet/standard/using-linq
День сто восьмой. #ЗаметкиНаПолях
LINQ. Продолжение
Основные примеры
1. Ключевые компоненты —
Продолжение следует…
Источник: https://docs.microsoft.com/en-us/dotnet/standard/using-linq
LINQ. Продолжение
Основные примеры
1. Ключевые компоненты —
Where
, Select
и Aggregate
:// Фильтрация списка (выбор овчарок из списка собак)2. Спрямление списка списков:
// API
var shepards = dogs.Where(dog => dog.Breed == DogBreed.Shepard);
// Запрос
var queryShepards = from dog in dogs
where dog.Breed == DogBreed.Shepard
select dog;
// Отображение списка объектов типа A в список объектов типа B
// API
var cats = dogs.Select(dog => dog.TurnIntoACat());
// Запрос
var queryCats = from dog in dogs
select dog.TurnIntoACat();
// Суммирование длин строк из набора
int sumOfStrings = strings.Aggregate(0, (s1, s2) => s1 + s2.Length);
// Преобразование списка собачьих питомников в единый список собак из всех питомников3. Объединение/пересечение двух наборов с пользовательским блоком сравнения (используется объект, реализующий
var allDogsFromKennels = kennels.SelectMany(kennel => kennel.Dogs);
IEqualityComparer<T>
, для сравнения объектов между собой):// Получаем всех короткошёрстных собак из двух питомников4. Упорядочение набора:
var shortHairedDogs = kennel1.Dogs.Union(kennel2.Dogs, new HairComparer());
…
public class HairComparer : IEqualityComparer<Dog> {…}
// Получаем волонтёров, работающих в обоих благотворительных обществах
var volunteers = humaneSociety1.Volunteers.Intersect(humaneSociety2.Volunteers, new VolunteerTimeComparer());
// Получаем пути движения, упорядоченные сначала по отсутствию платных участков, затем по времени в пути5. А этот метод расширения использует отражение, чтобы вывести набор открытых свойств экземпляра, имеющих те же значения, что и у другого экземпляра:
var results = DirectionsProcessor.GetDirections(start, end)
.OrderBy(direction => direction.HasNoTolls)
.ThenBy(direction => direction.EstimatedTime);
public static class PropExtensionsНайдём одинаковые свойства двух экземпляров класса
{
public static IEnumerable<PropertyInfo> PublicEqualProps<T>(this T self, T to, params string[] ignore) where T : class
{
if (self == null || to == null)
return null;
// Выбирает свойства с одинаковыми значениями, не входящие в ignore, в набор свойств
var equalProps = from property in typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)
where !ignore.Contains(property.Name)
let selfValue = property.GetValue(self, null)
let toValue = property.GetValue(to, null)
where !Equals(selfValue, toValue)
select property;
return equalProps;
}
}
Person
:var male = new Person {Вывод:
Age = 41,
FirstName = "John",
LastName = "Smith",
Male = true
};
var female = new Person {
Age = 41,
FirstName = "Jane",
LastName = "Smith",
Male = false
};
foreach(var prop in male.PublicEqualProps(female))
Console.WriteLine(prop.Name);
AgeПолный список примеров можно скачать здесь https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
LastName
Продолжение следует…
Источник: https://docs.microsoft.com/en-us/dotnet/standard/using-linq
👍2
День сто девятый. #ЗаметкиНаПолях
PLINQ
PLINQ или Параллельный LINQ – это движок параллельного выполнения выражений LINQ. Другими словами, обычное выражение LINQ может быть легко распараллелено в любое количество потоков. Это достигается через вызов метода AsParallel(), предшествующий выражению.
Рассмотрим следующий пример:
Параллелизуемые задания, использующие ресурсы ЦП, которые можно легко выразить через LINQ (другими словами, чистые функции без побочных эффектов) являются отличными кандидатами для PLINQ. Для работы с заданиями, которые имеют побочный эффект, рекомендуется рассмотреть возможность использования библиотеки параллельных задач.
Источник: https://docs.microsoft.com/en-us/dotnet/standard/using-linq
PLINQ
PLINQ или Параллельный LINQ – это движок параллельного выполнения выражений LINQ. Другими словами, обычное выражение LINQ может быть легко распараллелено в любое количество потоков. Это достигается через вызов метода AsParallel(), предшествующий выражению.
Рассмотрим следующий пример:
public static string GetAllFacebookUserLikesMessage(IEnumerable<FacebookUser> facebookUsers)Этот код разделит
{
var seed = default(UInt64);
Func<UInt64, UInt64, UInt64> threadAccumulator = (t1, t2) => t1 + t2;
Func<UInt64, UInt64, UInt64> threadResultAccumulator = (t1, t2) => t1 + t2;
Func<Uint64, string> resultSelector = total => $"Facebook has {total} likes!";
return facebookUsers.AsParallel()
.Aggregate(seed, threadAccumulator, threadResultAccumulator, resultSelector);
}
facebookUsers
между системными потоками по мере необходимости, суммирует общее количество лайков в каждом потоке параллельно, суммирует результаты, вычисленные каждым потоком, и выдаст полученный результат в строке (см. диаграмму ниже).Параллелизуемые задания, использующие ресурсы ЦП, которые можно легко выразить через LINQ (другими словами, чистые функции без побочных эффектов) являются отличными кандидатами для PLINQ. Для работы с заданиями, которые имеют побочный эффект, рекомендуется рассмотреть возможность использования библиотеки параллельных задач.
Источник: https://docs.microsoft.com/en-us/dotnet/standard/using-linq
День сто десятый. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по C#
1. Что такое C#?
C# - это язык программирования. Он был создан Microsoft в 2000 году для предоставления современного языка программирования общего назначения, который можно использовать для разработки всех видов программного обеспечения для различных платформ, включая Windows, Web и Mobile, используя только один язык программирования. Сегодня C# является одним из самых популярных языков программирования в мире. Миллионы разработчиков программного обеспечения используют C# для создания всех видов программного обеспечения.
C# является основным языком для создания программных приложений Microsoft .NET. Разработчики могут создавать практически все виды программного обеспечения с использованием C#, включая приложения пользовательского интерфейса Windows, консольные приложения, серверные службы, облачные API, веб-службы, элементы управления и библиотеки, серверные приложения, веб-приложения, приложения для iOS и Android, ПО искусственного интеллекта и машинного обучения, а также блокчейн приложений.
С помощью IDE Visual Studio C# обеспечивает быструю разработку приложений. C# - это современный, объектно-ориентированный, простой, универсальный и ориентированный на производительность язык программирования. C# разработан на основе лучших функций и вариантов использования нескольких языков программирования, включая C++, Java, Pascal и SmallTalk.
Синтаксис C# похож на C++. Библиотека .NET и C# похожа на Java. C# поддерживает современные возможности объектно-ориентированного языка программирования, включая абстракцию, инкапсуляцию, полиморфизм и наследование. C# является строго типизированным языком, и большинство типов наследуются от класса Object.
C# поддерживает концепции классов и объектов. Классы имеют такие элементы, как поля, свойства, события и методы. C# универсален, современен и поддерживает современные потребности программирования. С самого начала язык C# прошел различные обновления. В этом году ожидается релиз C# версии 8.0.
Источник: https://www.c-sharpcorner.com
Самые часто задаваемые вопросы на собеседовании по C#
1. Что такое C#?
C# - это язык программирования. Он был создан Microsoft в 2000 году для предоставления современного языка программирования общего назначения, который можно использовать для разработки всех видов программного обеспечения для различных платформ, включая Windows, Web и Mobile, используя только один язык программирования. Сегодня C# является одним из самых популярных языков программирования в мире. Миллионы разработчиков программного обеспечения используют C# для создания всех видов программного обеспечения.
C# является основным языком для создания программных приложений Microsoft .NET. Разработчики могут создавать практически все виды программного обеспечения с использованием C#, включая приложения пользовательского интерфейса Windows, консольные приложения, серверные службы, облачные API, веб-службы, элементы управления и библиотеки, серверные приложения, веб-приложения, приложения для iOS и Android, ПО искусственного интеллекта и машинного обучения, а также блокчейн приложений.
С помощью IDE Visual Studio C# обеспечивает быструю разработку приложений. C# - это современный, объектно-ориентированный, простой, универсальный и ориентированный на производительность язык программирования. C# разработан на основе лучших функций и вариантов использования нескольких языков программирования, включая C++, Java, Pascal и SmallTalk.
Синтаксис C# похож на C++. Библиотека .NET и C# похожа на Java. C# поддерживает современные возможности объектно-ориентированного языка программирования, включая абстракцию, инкапсуляцию, полиморфизм и наследование. C# является строго типизированным языком, и большинство типов наследуются от класса Object.
C# поддерживает концепции классов и объектов. Классы имеют такие элементы, как поля, свойства, события и методы. C# универсален, современен и поддерживает современные потребности программирования. С самого начала язык C# прошел различные обновления. В этом году ожидается релиз C# версии 8.0.
Источник: https://www.c-sharpcorner.com
День сто одиннадцатый. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по C#
2. Что такое объект в C#?
C# - это объектно-ориентированный язык программирования. Классы являются основой C#. Класс - это шаблон, который определяет, как будет выглядеть структура данных, как данные будут храниться, управляться и передаваться. У класса есть поля, свойства, методы и другие члены.
Классы – концептуальные понятия, а объекты реальные. Объекты создаются как экземпляры класса. Класс может иметь столько экземпляров, сколько необходимо. Класс определяет тип объекта. Объекты хранят реальные значения в памяти компьютера.
Любая сущность реального мира, которая может иметь некоторые характеристики или которая может выполнять какую-либо работу, называется объектом или экземпляром, т. е. копией сущности на языке программирования.
Например, нам нужно создать программу, которая занимается автомобилями. Нам нужно создать сущность для автомобиля. Давайте назовем это классом Автомобиль. Автомобиль имеет четыре свойства: модель, тип, цвет и размер.
Чтобы представить автомобиль в программировании, мы можем создать класс
Например, Honda Civic является экземпляром автомобиля. В программировании Honda Civic - это объект. Свойства
Источник: https://www.c-sharpcorner.com
Самые часто задаваемые вопросы на собеседовании по C#
2. Что такое объект в C#?
C# - это объектно-ориентированный язык программирования. Классы являются основой C#. Класс - это шаблон, который определяет, как будет выглядеть структура данных, как данные будут храниться, управляться и передаваться. У класса есть поля, свойства, методы и другие члены.
Классы – концептуальные понятия, а объекты реальные. Объекты создаются как экземпляры класса. Класс может иметь столько экземпляров, сколько необходимо. Класс определяет тип объекта. Объекты хранят реальные значения в памяти компьютера.
Любая сущность реального мира, которая может иметь некоторые характеристики или которая может выполнять какую-либо работу, называется объектом или экземпляром, т. е. копией сущности на языке программирования.
Например, нам нужно создать программу, которая занимается автомобилями. Нам нужно создать сущность для автомобиля. Давайте назовем это классом Автомобиль. Автомобиль имеет четыре свойства: модель, тип, цвет и размер.
Чтобы представить автомобиль в программировании, мы можем создать класс
Car
с четырьмя свойствами: Model
, Type
, Color
и Size
. Они называются членами класса. Класс имеет несколько типов членов: конструкторы, поля, свойства, методы, делегаты и события. Член класса может быть приватным, защищенным и открытым. Поскольку эти свойства автомобиля могут быть доступны извне класса, они могут быть открытыми.Например, Honda Civic является экземпляром автомобиля. В программировании Honda Civic - это объект. Свойства
Model
, Type
, Color
, and Size
автомобиля Honda Civic: Civic, Honda, Red, 4.Источник: https://www.c-sharpcorner.com
День сто двенадцатый. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по C#
3. Что Такое Управляемый и Неуправляемый Код?
Управляемый Код
Это код, разработанный с использованием платформы .NET и ее поддерживаемых языков программирования, таких как C# или VB.NET. Управляемый код напрямую выполняется общеязыковой средой исполнения (CLR или Runtime), а его жизненный цикл, включая создание объектов, выделение памяти и удаление объектов, управляется средой исполнения. Любой код, написанный внутри .NET Framework или на языке, поддерживаемом .NET Framework, является управляемым кодом.
Неуправляемый Код
Код, разработанный за пределами .NET Framework, называется неуправляемым кодом.
Приложения, которые не работают под управлением CLR, считаются неуправляемыми. Такие языки, как C или C++ или Visual Basic, неуправляемые. Создание, выполнение и удаление объектов в неуправляемом коде выполняется программистами напрямую. Если программисты пишут плохой код, это может привести к утечкам памяти и нежелательному распределению ресурсов.
.NET Framework предоставляет механизм работы с неуправляемым кодом, который будет использоваться в управляемом коде, и наоборот. Процесс выполняется с помощью классов-обёрток.
Источник: https://www.c-sharpcorner.com
Самые часто задаваемые вопросы на собеседовании по C#
3. Что Такое Управляемый и Неуправляемый Код?
Управляемый Код
Это код, разработанный с использованием платформы .NET и ее поддерживаемых языков программирования, таких как C# или VB.NET. Управляемый код напрямую выполняется общеязыковой средой исполнения (CLR или Runtime), а его жизненный цикл, включая создание объектов, выделение памяти и удаление объектов, управляется средой исполнения. Любой код, написанный внутри .NET Framework или на языке, поддерживаемом .NET Framework, является управляемым кодом.
Неуправляемый Код
Код, разработанный за пределами .NET Framework, называется неуправляемым кодом.
Приложения, которые не работают под управлением CLR, считаются неуправляемыми. Такие языки, как C или C++ или Visual Basic, неуправляемые. Создание, выполнение и удаление объектов в неуправляемом коде выполняется программистами напрямую. Если программисты пишут плохой код, это может привести к утечкам памяти и нежелательному распределению ресурсов.
.NET Framework предоставляет механизм работы с неуправляемым кодом, который будет использоваться в управляемом коде, и наоборот. Процесс выполняется с помощью классов-обёрток.
Источник: https://www.c-sharpcorner.com
День сто тринадцатый. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по C#
4. Чем отличается интерфейс от абстрактного класса в C#?
Это, вероятно, самый часто задаваемый вопрос в мире .Net. Теоретически между абстрактным классом и интерфейсом есть 5 отличий, которые перечислены ниже:
1. Класс может реализовывать любое количество интерфейсов, но дочерний класс может наследовать только от одного абстрактного класса.
2. Абстрактный класс может иметь неабстрактные (конкретные) методы, в то время как в случае интерфейса все методы должны быть абстрактными. (Начиная с C# 8 допускается реализация по умолчанию интерфейсных методов).
3. Абстрактный класс может объявлять или использовать любые переменные, в то время как интерфейсу это запрещено. То есть следующий код приведёт к ошибке компиляции "Interfaces cannot contain fields" ("Интерфейсы не могут содержать полей"):
5. Абстрактный класс может иметь все модификаторы доступа для всех своих объявлений членов, в то время как в интерфейсе мы не можем объявлять никаких модификаторов доступа для членов (включая
Самые часто задаваемые вопросы на собеседовании по C#
4. Чем отличается интерфейс от абстрактного класса в C#?
Это, вероятно, самый часто задаваемый вопрос в мире .Net. Теоретически между абстрактным классом и интерфейсом есть 5 отличий, которые перечислены ниже:
1. Класс может реализовывать любое количество интерфейсов, но дочерний класс может наследовать только от одного абстрактного класса.
2. Абстрактный класс может иметь неабстрактные (конкретные) методы, в то время как в случае интерфейса все методы должны быть абстрактными. (Начиная с C# 8 допускается реализация по умолчанию интерфейсных методов).
3. Абстрактный класс может объявлять или использовать любые переменные, в то время как интерфейсу это запрещено. То есть следующий код приведёт к ошибке компиляции "Interfaces cannot contain fields" ("Интерфейсы не могут содержать полей"):
interface TestInterface4. Абстрактный класс может иметь объявление конструктора, а интерфейс нет. Возникает аналогичная пункту 3 ошибка компиляции "Interfaces cannot contain constructors" ("Интерфейсы не могут содержать конструкторов")
{
int x = 4; // Неверное объявление в интерфейсе
void getMethod();
string getName();
}
abstract class TestAbstractClass
{
int i = 4;
int k = 3;
public abstract void getClassName();
}
5. Абстрактный класс может иметь все модификаторы доступа для всех своих объявлений членов, в то время как в интерфейсе мы не можем объявлять никаких модификаторов доступа для членов (включая
public
), так как все члены интерфейса неявно открытые. Следующий код приведёт к ошибке компиляции "The modifier 'public' is not valid for this item" ("Модификатор 'public' недопустим для этого элемента"):interface TestInterfaceИсточник: https://www.c-sharpcorner.com
{
public void getMethod();
public string getName();
}
День сто четырнадцатый. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по C#
5. В чём разница между операторами "continue" и "break" в C#?
Используя оператор
Пример
Самые часто задаваемые вопросы на собеседовании по C#
5. В чём разница между операторами "continue" и "break" в C#?
Используя оператор
break
, вы можете «выпрыгнуть из цикла», тогда как, используя оператор continue
, вы можете «перепрыгнуть через одну итерацию» и продолжить выполнение цикла.Пример
break
:for (int i = 0; i <= 5; i++) {Вывод:
if (i == 4) {
break;
}
Console.WriteLine(i);
Console.ReadLine();
}
0Пример
1
2
3
continue
:for (int i = 0; i <= 5; i++) {Вывод:
if (i == 4) {
continue;
}
Console.WriteLine(i);
Console.ReadLine();
}
1Источник: https://www.c-sharpcorner.com
2
3
5
День сто пятнадцатый. #ЗаметкиНаПолях
Случайные числа в C#
Вокруг генерации случайных чисел всегда ходит много мифов и поэтому возникает много путаницы. Можно ли использовать простую конструкцию:
На самом деле в подавляющем большинстве случаев для генерации случайных (псевдослучайных) чисел достаточно следующего кода:
1. Указание числа посева (seed) в конструкторе класса
Для случайного перемешивания небольших коллекций вполне подойдёт простой код LINQ:
Источники:
- https://www.youtube.com/watch?v=kW84q8WOBdU
- https://stackoverflow.com/questions/273313/randomize-a-listt/
Случайные числа в C#
Вокруг генерации случайных чисел всегда ходит много мифов и поэтому возникает много путаницы. Можно ли использовать простую конструкцию:
var random = new Random();или же необходимо подключать криптографические библиотеки?
На самом деле в подавляющем большинстве случаев для генерации случайных (псевдослучайных) чисел достаточно следующего кода:
Random random = new Random();Однако есть несколько ограничений:
Console.WriteLine(random.Next());
1. Указание числа посева (seed) в конструкторе класса
Random
приведёт к созданию одинаковых последовательностей случайных чисел, поэтому используйте конструктор без параметров. Например, следующий код будет генерировать одну и ту же последовательность при каждом запуске:Random random = new Random(10010);2. Создавайте объект
for (int i = 0; i < 10; i++)
{
Console.WriteLine(random.Next());
}
Random
только один раз. Если метод должен использовать случайное число, не создавайте новый объект Random
внутри метода. Создайте его вне метода и передавайте в метод в качестве параметра:Random random = new Random();вместо
SomeMethod(random);
SomeMethod(new Random());Это связано с пунктом 1. Конструктор класса Random без параметров берёт в качестве числа посева системное время в формате тактов процессора (1 такт = 100 наносекунд). Однако по природе своей реализации системные часы не различают разницу во времени примерно в 15 миллисекунд. Поэтому последовательные вызовы конструктора класса
Random
могут привести к созданию нескольких одинаковых случайных последовательностей.Для случайного перемешивания небольших коллекций вполне подойдёт простой код LINQ:
var shuffeledList = somelist.OrderBy(x => random.Next());Для больших коллекций есть более эффективные алгоритмы, например, Фишера-Йетса (здесь используем метод-расширение для
IList
):private static Random rng = new Random();Использование:
public static void Shuffle<T>(this IList<T> list)
{
int n = list.Count;
while (n > 1) {
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
List<Product> products = GetProducts();Для небольшого количества случаев, когда требуется криптографически безопасное случайное число (например, при создании случайного пароля), используйте класс
products.Shuffle();
RNGCryptoServiceProvider
или наследуйте от System.Security.Cryptography.RandomNumberGenerator
.Источники:
- https://www.youtube.com/watch?v=kW84q8WOBdU
- https://stackoverflow.com/questions/273313/randomize-a-listt/
День сто шестнадцатый. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по C#
6. В чем разница между константой и полем только для чтения в C#?
Поле
Поле
Например, у нас есть тестовый класс, в котором у нас две переменные: одна только для чтения, а другая - константа.
Если мы создадим экземпляр класса
Источник: https://www.c-sharpcorner.com
Самые часто задаваемые вопросы на собеседовании по C#
6. В чем разница между константой и полем только для чтения в C#?
Поле
сonst
- это константа, переменная, значение которой является постоянным со времени компиляции. Присваивать значение константе обязательно. По умолчанию поле const является статическим, и мы не можем изменить значение переменной const при выполнении программы.Поле
readonly
- это поле, значение которого мы можем изменить или назначить во время выполнения, но только через нестатический конструктор.Например, у нас есть тестовый класс, в котором у нас две переменные: одна только для чтения, а другая - константа.
class Test {При попытке изменить значение константы в конструкторе возникает исключение "
readonly int readOnly = 10;
const int cons = 10;
public Test() {
read = 100;
//cons = 100;
}
public void Check() {
Console.WriteLine("Read only: {0}", readOnly);
Console.WriteLine("Const: {0}", cons);
}
}
The left-hand side of an assignment must be a variable, property or indexer
" ("Левая часть оператора присваивания должна быть переменной, свойством или индексатором
").Если мы создадим экземпляр класса
Test
и вызовем метод Check()
, мы получим следующий вывод:Read only: 100При компиляции значения const записываются непосредственно вместо вызывающего константу кода. В предыдущем примере все обращения к cons при компиляции будут заменены на 10. Это может иметь как преимущества, так и недостатки. Код работает гораздо быстрее, так как избегает лишнего вызова, но. Если вам нужно изменить значение константы, вам нужно перекомпилировать все сборки, обращающиеся к ней. Поэтому в общем случае, если к константе обращаются другие сборки, предпочтительнее использовать поле
Const: 10
readonly
. Также константа бесполезна, если значение выбирается во время выполнения, например, из файла конфигурации.Источник: https://www.c-sharpcorner.com
C-Sharpcorner
C# Corner: AI-Powered Upskilling and Growth Platform
C# Corner is a global community focused on members education and growth through tutorials, videos, podcasts, conferences, hackathons, certifications, speaking opportunities, and mentorship programs.