Введение
12 ноября 2014 в рамках конференции Connect () Microsoft презентовала Visual Studio 2015, которая имеет много новых и интересных возможностей тестирования для разработчиков. Microsoft анонсировала новую версию C# - C# 6.0, улучшенную и обновленную. Одно из нововведений функций C# 6.0 –оператор nameof.
Что такое оператор nameof
С введением оператора nameof теперь возможно избегать сложно закодированых строчек в коде. Оператор nameof принимает имя элементов кода и возвращает строчный литерал этого элемента. Параметры, которые принимает оператор nameof, включают имя класса и всех его членов, таких как: методы, переменные и константы.
Довольно удобно использовать строчные литералы, чтобы бросить ArgumentNullException (назвать аргумент винованым) и вызвать события PropertyChanged (чтоб назвать измененное свойство), но велика вероятность появления ошибки, потому что можно неправильно их записать или не восстановить после рефакторинга. Выражения оператора nameof являются особым видом строчного литерала, где компилятор проверяет, есть ли у Вас что-то с заданным именем и Visual Studio знает, куда он ссылается, поэтому навигация и рефакторинг будут работать легко.
Оператор nameof может быть полезным для разных сценариев, таких как INotifyPropertyChanged, ArgumentNullException и отображения.
Пример 1
string person;
Console.WriteLine(nameof(person)); // prints person
int x = 2;
Console.WriteLine(nameof(x)); //prints x
Пример 2
class Operatornameof
{
public Operatornameof(string name) //constructor
{
if (name == null)
throw new ArgumentNullException(nameof(name)); // use of nameof Operator
else
Console.WriteLine("Name: " + name);
}
}
Пример 3
class Operatornameof
{
private int _price;
public int price
{
get
{
return this._price;
}
set
{
this._price = value;
PropertyChanged(this, new PropertyChangedEventArgs(nameof(this.price))); //// INotifyPropertyChanged
}
}
private void PropertyChanged(Operatornameof operatornameof1, PropertyChangedEventArgs propertyChangedEventArgs)
{
throw new NotImplementedException();
}
}
Программа 1 с использованием Visual Studio 2013
using System;
using System.Text;
namespace CSharpFeatures
{
public class operatornameof
{
public operatornameof(string name, string location, string age)
{
if (name == null)
throw new ArgumentNullException("name");
else
Console.WriteLine("\n Name: " + name);
if (location == null)
throw new ArgumentNullException("location");
else
Console.WriteLine(" Location: " + location);
if (age == null)
throw new ArgumentNullException("age");
else
Console.WriteLine(" Age: " + age);
}
static void Main(String[] args)
{
operatornameof p = new operatornameof("Abhishek", "Ghaziabad", "23");
Console.ReadKey();
}
}
}
Видео курсы по схожей тематике:
Программа 1 с использованием Visual Studio 2015 Preview
using System;
using System.Text;
namespace CSharpFeatures
{
public class Operatornameof
{
public Operatornameof(string name, string location, string age)
{
if (name == null)
throw new ArgumentNullException(nameof(name));
else
Console.WriteLine("Name: " + name);
if (location == null)
throw new ArgumentNullException(nameof(location));
else
Console.WriteLine("Location: " + location);
if (age == null)
throw new ArgumentNullException(nameof(age));
else
Console.WriteLine("Age: " + age);
}
static void Main(String[] args)
{
Operatornameof p = new Operatornameof("Abhishek", "Ghaziabad", "23");
Console.Read();
}
}
}
Программа 2 с использованием Visual Studio 2013
using System;
namespace CSharpFeatures
{
class Operatornameof1
{
static void Main(string[] args)
{
details d = new details();
d.Age = 23;
d.Name = "Abhishek";
Console.WriteLine("\n Name: {0} ", d.Name);
Console.WriteLine(" Age: {0} ", d.Age);
Console.ReadKey();
}
}
class details
{
private string _Name;
public int _Age;
public string Name
{
get { return this._Name; }
set { this._Name = value; }
}
public int Age
{
get { return this._Age; }
set { this._Age = value; }
}
}
}
Программа 3 с использованием Visual Studio 2015 Preview
using System;
namespace CSharpFeatures
{
class Operatornameof2
{
static void Main(string[] args)
{
details d = new details();
Console.WriteLine("{0} : {1}", nameof(details.Name), d.Name);
Console.WriteLine("{0} : {1}", nameof(details.Age), d.Age);
Console.ReadKey();
}
}
class details
{
public string Name { get; set; } = "Abhishek";
public int Age { get; set; } = 23;
}
}
Бесплатные вебинары по схожей тематике:
Из данной статьи Вы узнали, как использовать оператор nameof, чтобы избежать использования сложно закодированых строчек в коде. Надеемся, что Вам понравилась новая функция C# 6.0, введенная Microsoft.
Источник: http://www.c-sharpcorner.com/UploadFile/16101a/nameof-operator-a-new-feature-of-C-Sharp-6-0/
Статьи по схожей тематике