Загрузил Станислав Перекрест

Стандарты написания программного кода на языке C#

реклама
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 2 из 33
https://www.elma-bpm.ru/KB/article-6651.html
IDisposable
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 3 из 33
https://www.elma-bpm.ru/KB/article-6651.html
And
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 4 из 33
https://www.elma-bpm.ru/KB/article-6651.html
new
1
public class Book
2
{
3
public virtual void Print()
4
{
5
Console.WriteLine("Printing Book");
6
7
}
}
8
9
10
public class PocketBook : Book
{
11
public new void Print()
12
{
"Printing PocketBook"
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 5 из 33
1
https://www.elma-bpm.ru/KB/article-6651.html
PocketBook pocketBook = new PocketBook();
2
3
pocketBook.Print();
// Выведет "Printing PocketBook"
4
// Выведет
"Printing Book"
Print()
NotImplementedException
1
someObject SomeProperty GetChild().Foo()
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
1
public void SetAge(int years)
2
{
https://www.elma-bpm.ru/KB/article-6651.html
3
AssertValueIsInRange(years, 0, 200, nameof(years));
4
this age
Проверяйте внутренние состояния с помощью инвариантов:
Стр. 6 из 33
1
public void Render()
2
{
3
AssertNotDisposed();
4
5
// ...
DataSource
DataMember
Object.ToString
NewGuid
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
https://www.elma-bpm.ru/KB/article-6651.html
HttpContext.Current
IEnumerable<T>
ICollection<T>
IEnumerable<T>
ICollection<T>
Стр. 7 из 33
IReadOnlyCollection<T> IReadOnlyList<T>
IReadOnlyDictionary<TKey, TValue>
null
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
https://www.elma-bpm.ru/KB/article-6651.html
null
null
null
string.IsNullOrEmpty()
IConfiguration
if
null
ArgumentNullException
Стр. 8 из 33
ArgumentException
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
https://www.elma-bpm.ru/KB/article-6651.html
Exception
SystemException
async await
Task,
async await
Task
async await
Task
null
null
null
1
event EventHandler Notify;
2
3
protected virtual void OnNotify(NotifyEventArgs args)
4
{
5
if (Notify != null)
6
{
7
Notify Invoke(this
args);
On
TimeChanged
OnTimeChanged
PropertyChanged
Стр. 9 из 33
Property
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 10 из 33
https://www.elma-bpm.ru/KB/article-6651.html
INotifyPropertyChanged
null
this
null
EventArgs.Empty
null
null
where
1
class SomeClass
2
{}
as
3
4
// Неправильно
5
class MyClass
6
{
7
void SomeMethod(T t)
8
{
9
object temp = t;
10
SomeClass obj = (SomeClass) temp;
11
12
}
}
13
14
// Правильно
15
class MyClass where T : SomeClass
16
{
17
void SomeMethod
18
19
20
21
1
public IEnumerable GetGoldMemberCustomers()
2
{
3
const decimal GoldMemberThresholdInEuro = 1_000_000;
4
5
var query = from customer in db.Customers
6
where customer.Balance > GoldMemberThresholdInEuro
7
select new GoldMember(customer.Name, customer.Balance);
8
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
https://www.elma-bpm.ru/KB/article-6651.html
8
9
10
Поскольку LINQ-запросы используют отложенное выполнение, возвращение q, как это ни
странно, вернет древо выражения, представляющее вышеуказанный запрос. Всякий раз,
когда пользователь вычисляет результат, используя foreach или что-то похожее, весь
запрос выполняется заново, создавая каждый раз новые экземпляры GoldMember. Как
следствие, вы не сможете использовать оператор ==, чтобы сравнить различные экземпляры
GoldMember. Вместо этого всегда явно вычисляйте результат LINQ-запроса, используя
ToList(), ToArray() или схожие методы.
this
base
private
internal sealed
public
customer.HasNoOrders
1
bool hasOrders
1
EleWise ELMA CRM
HasNoOrders
EleWise.ELMA.CRM
Стр. 11 из 33
EleWise.ELMA.CRM.dll
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
https://www.elma-bpm.ru/KB/article-6651.html
EleWise.ELMA.CRM.dll
Core
EleWise.ELMA.CRM.Core.dll
Locko_Application.cs BUD_BudgetTeam.md
Стр. 12 из 33
1
namespace EleWise.ELMA.Model.Entities
2
{
3
// Базовый интерфейс сущности
4
public interface IEntity:
5
{
6
7
: IIdentified
...
}
8
9
// Интерфейс сущности с идентификатором
10
public interface IEntity<IdT>:
11
{
IEntity
12
13
14
1
// В файле MyClass.cs
2
public partial class MyClass
3
{...}
4
5
// В файле MyClass.Designer.cs
6
7
using
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
1
list
System
https://www.elma-bpm.ru/KB/article-6651.html
Generic
()
Лучше сделать так:
1
using System.Collections.Generic;
2
3
Если вам необходимо избежать конфликтов именования, используйте директиву using для
создания псевдонима пространства имен или типа:
1
using Label
System
1
public class Whatever
2
{
WebControls
3
public static readonly Color PapayaWhip = new Color(0xFFEFD5);
4
public const int MaxNumberOfWheels = 18;
5
public const
ReadCreateOverwriteMask
0b0010_1100
6
Строки, предназначенные для логирования или трассировки, являются исключением из этого
правила. Литеральные значения допускается использовать только тогда, когда их смысл
ясен из контекста и их не планируется изменять. Например:
1
mean = (a + b) / 2; // среднее арифметическое
2
Если значение одной константы зависит от значения другой, укажите это в своем коде.
1
public class SomeSpecialContainer
2
{
3
public const int MaxItems = 32;
4
public const int HighWaterMark = 3 * MaxItems / 4; // 75%
5
Заметка: Перечисления часто могут использоваться в качестве хранилища символьных
констант.
Стр. 13 из 33
var
var
1
var item = 3;
// Что за тип? int? uint? float?
2
var myfoo = MyFactoryMethod.Create("arg");
// Не понятно, какой тип имеет
3
// класс или интерфейс. Кроме того,
4
// тяжело изменять код, который работает
5
// c этой переменной, если исходный класс
6
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
https://www.elma-bpm.ru/KB/article-6651.html
Вместо этого используйте var, как в примерах ниже:
1
var query = from order in orders where order.Items > 10 and order.TotalValue >
2
var repository = new RepositoryFactory.Get();
3
Во всех трех примерах тип присваиваемых переменным значений очевиден. Для получения
более подробной информации об использовании var читайте статью Ерика Липперта
Использование и злоупотребления неявной типизацией.
1
result
someField
Исключение: Несколько выражений присваивания в одной строке разрешены
при использовании out-переменных, is-паттерна или преобразования в tuple. Например:
1
bool success = int.TryParse(text, out int result);
2
3
if ((items[0] is string text) || (items[1] is Action action))
4
{
5
}
6
7
1
var startInfo = new ProcessStartInfo("myapp.exe");
2
startInfo.StandardOutput = Console.Output;
3
startInfo.UseShellExecute = true;
4
5
var countries = new List();
6
countries.Add("Netherlands");
7
countries.Add("United States");
8
9
countryLookupTable
string ()
10
11
Используйте инициализатор объекта:
Стр. 14 из 33
1
var startInfo = new ProcessStartInfo("myapp.exe")
2
{
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 15 из 33
https://www.elma-bpm.ru/KB/article-6651.html
3
StandardOutput = Console.Output,
4
UseShellExecute = true
5
};
6
7
var countries = new List { "Netherlands", "United States" };
8
9
10
var countryLookupTable = new Dictionary<string, string>
{
11
12
13
true
true
false
false
1
while (condition == false)// неправильно, плохой стиль
2
while (condition != true)// тоже неправильно
3
while (((condition == true) == true) == true)// где ты остановишься?
4
true
false
for
1
for (int index = 0; index < 10; ++index)
2
{
3
if (someCondition)
4
{
5
foreach
index = 11; // Неправильно! Вместо этого используйте ‘break’ или ‘continue’.
6
7
from
if else do while for foreach
1
case
if (isActive) if (isVisible) Foo(); else Bar(); // к какому ‘if’ относится ‘else’?
2
3
// Лучше сделать так:
4
if (isActive)
5
{
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 16 из 33
5
https://www.elma-bpm.ru/KB/article-6651.html
{
6
if (isVisible)
7
{
8
Foo();
9
}
10
else
11
{
12
13
14
default
switch/case
InvalidOperationException
1
void Foo(string answer)
2
{
3
switch (answer)
4
{
5
case "no":
6
{
7
Console.WriteLine("You answered with No");
8
break;
9
}
10
11
case "yes":
12
{
13
Console.WriteLine("You answered with Yes");
14
break;
15
}
16
17
default:
18
{
19
20
answer);
21
22
23
if-else-if
1
void Foo(string answer)
2
{
3
if (answer == "no")
4
{
5
else
Console.WriteLine("Вы ответили Нет");
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 17 из 33
(
6
}
7
else if (answer == "yes")
8
{
9
https://www.elma-bpm.ru/KB/article-6651.html
);
Console.WriteLine("Вы ответили Да");
10
}
11
else
12
{
13
// Что должно случиться, когда этот блок выполнится? Игнорировать это?
14
// Если нет, то
сгенерировать исключение InvalidOperationException.
15
16
}
return
if-else
1
bool isPositive;
2
3
if (value > 0)
4
{
5
isPositive = true;
6
}
7
else
8
{
9
10
isPositive
}
1
bool isPositive
(
1
string classification;
2
3
if (value> 0)
4
{
5
classification = "positive";
6
}
7
else
8
{
9
classification = "negative";
10
11
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 18 из 33
12
https://www.elma-bpm.ru/KB/article-6651.html
return
1
return (value
1
int result;
0)
2
3
if (offset == null)
4
{
5
result = -1;
6
}
7
else
8
{
9
10
result = offset.Value;
}
11
12
return
1
return offset ??
1
if (employee.Manager != null)
2
{
3
1
return employee.Manager.Name;
4
}
5
else
6
{
7
8
}
1
return employee Manager
1
return workflowTask
1
return GetProcessHeader
Header? Published
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 19 из 33
https://www.elma-bpm.ru/KB/article-6651.html
1
if (member.HidesBaseClassMember && (member.NodeType != NodeType.InstanceInitializer
2
{
3
// что-то делаем
4
}
1
if (NonConstructorMemberUsesNewKeyword(member))
2
{
3
4
// что-то делаем
}
5
6
7
private bool NonConstructorMemberUsesNewKeyword(Member member)
8
{
9
return
10
11
12
}
1
public class MyString
2
{
3
private string someText;
4
5
public int IndexOf(string phrase)
6
{
7
return IndexOf(phrase, 0);
8
}
9
10
public int IndexOf(string phrase, int startIndex)
11
{
12
return IndexOf(phrase, startIndex, someText.Length - startIndex);
13
}
14
15
public virtual int IndexOf(string phrase
int startIndex, int count)
16
17
18
19
}
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 20 из 33
https://www.elma-bpm.ru/KB/article-6651.html
MyString
IndexOf
this()
1
public virtual int IndexOf(string phrase, int startIndex = 0, int count = -1)
2
{
3
int length = (count == -1) ? (someText.Length - startIndex) : count;
4
return someText IndexOf(phrase
5
}
1
object[] myAttributes
startIndex
length);
typeof(MyAttribute), inherit:
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 21 из 33
ref
https://www.elma-bpm.ru/KB/article-6651.html
out
1
bool
int TryParse
1
public Customer CreateCustomer
1
Customer customer
) {}
CreateCustomer
is
as
as,
null
NullReferenceException
1
var remoteUser = user as RemoteUser;
2
if (remoteUser != null)
3
{
4
}
1
if (user is RemoteUser remoteUser)
2
{
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 22 из 33
2
{
3
}
https://www.elma-bpm.ru/KB/article-6651.html
С# 7
as
HorizontalAlignment
C# 4
null
AlignmentHorizontal;
CanScrollHorizontally
ScrollableX
AppDomain
IBusinessService
ErrorLevel
FatalError
Click
listItem
MainPanel
MaximumItems
maximumItems
RedValue
listOfValues
ToString
FormatText
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
https://www.elma-bpm.ru/KB/article-6651.html
FormatText
System.Drawing
typeName
TView
BackColor
firstName
g_
s_
_currentUser mUserName m_loginTime
OnButtonClick
index
OnBtnClick
i
q
query
UI
UserInterface
Id
Identity
Стр. 23 из 33
GetLength
Enum Class
1
GetInt;
Struct
private readonly IMetadataRuntimeService MetadataRuntimeService
IComponent
IPersistable
ICustomAttributeProvider
SearchExamination
Common
SiteSecurity
Utility
Helper
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 24 из 33
https://www.elma-bpm.ru/KB/article-6651.html
Т
Т
ISession
TSession
1
class Employee
2
{
3
// Плохо!
4
static GetEmployee() {}
5
DeleteEmployee() {}
6
7
// Правильно
8
static Get() {...}
9
Delete() {...}
10
11
// Тоже верно.
12
13
14
}
Add Remove
1
bool b001
CanSeek
(lo
Count
l0)
AddItem Delete
NumberOfItems
101)
CannotSeek
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
CanSeek
https://www.elma-bpm.ru/KB/article-6651.html
CannotSeek
Is Has Can Allows
Support
CacheLevel
CacheLevel
Show,
ShowDialog
1
NHibernate.Extensibility
2
Microsoft.ServiceModel.WebApi
3
Microsoft.VisualStudio.Debugging
4
FluentAssertion Primitives
5
CaliburnMicro
Collections
Click Deleted
Closing Minimizing
Стр. 25 из 33
1
Arriving
Search
public event EventHandler
–ing
–ed
Closing
Closed
Before
After
Deleting
BeginDelete
Deleted
EndDelete
Deleting
Delete
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
https://www.elma-bpm.ru/KB/article-6651.html
Deleted
On
On
Closing
OnClosing
1
button Click
(
)
Extensions
Extensions
Async
TaskAsync
Async
Task
Task<TResult>
TaskAsync
Any()
IEnumerable
IEnumerable<T>
Count
Count()
Any()
Count()
IQueryable<T>
IEnumerable<T>
async
async
Task.Run Async
Стр. 26 из 33
async
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
https://www.elma-bpm.ru/KB/article-6651.html
Task.Run
Task.Run
await async
Task.Wait
await
Task.Wait
async await
1
private async Task GetDataAsync()
2
{
3
var result = await MyWebService.GetDataAsync();
4
return result ToString()
5
}
1
public ActionResult ActionAsync()
2
{
3
var data = GetDataAsync().Result;
4
5
6
return View(data)
}
System
object
Object string
Int32.Parse()
String
int
Int32
int.Parse()
ReadInt32 GetUInt16
Стр. 27 из 33
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 28 из 33
ConnectionStrings
https://www.elma-bpm.ru/KB/article-6651.html
ConfigurationManager
Settings
app.config
web.config
AssemblyInfo.cs
AssemblyInfo.cs
SolutionInfo.cs
1
var query
from item in items
1
var query
items Where(item
1
Customer customer = Array.Find(customers, delegate(Customer customer)
2
{
3
4
Length
select item;
0)
return customer.Name == "Tom";
});
используйте лямбда-выражение:
1
Customer customer
customer
customer Name == "Tom");
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
https://www.elma-bpm.ru/KB/article-6651.html
или даже лучше это:
1
var customer
customers
Name
"Tom")
dynamic
dynamic
Activator
Type.GetProperty()
Type.GetMethod()
async await
1
public Task GetDataAsync()
2
{
3
return MyWebService.FetchDataAsync()
4
5
Task
.ContinueWith(t => new
(
Result))
}
объявляйте метод следующим образом:
1
public async Task<Data> GetDataAsync()
2
{
3
string result = await MyWebService.FetchDataAsync();
4
return new Data(result)
5
async
Стр. 29 из 33
}
await
public protected
internal
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 30 из 33
(
https://www.elma-bpm.ru/KB/article-6651.html
)
if
if (condition == null);
+ - ==
if else switch case do while for
1
var dto = new ConsumerDto
2
{
3
Id = 123,
4
Name = "Microsoft",
5
PartnerShip = PartnerShip.Gold,
6
ShoppingCart =
7
{
8
["VisualStudio"]
9
10
foreach
}
};
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 31 из 33
https://www.elma-bpm.ru/KB/article-6651.html
1
methodThatTakesAnAction.Do(x =>
2
{
3
// какие-то действия
4
}
1
private string GetLongText =>
2
"ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC ABC A
1
var query
from product
1
var query =
product Price
2
from product in products
3
where product.Price > 10
4
select
10 select product
from
if (!string.IsNullOrEmpty(str) && (str !=
"new"));
#region
1
// Пространства имен Microsoft первые
2
using System;
3
using System.Collections.Generic;
4
using System.XML;
using
5
6
// Другие пространства имен идут в алфавитном порядке
7
using EleWise.ELMA.ComponentModel;
8
using EleWise ELMA Services
9
using Telerik
10
using Telerik
using
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 32 из 33
https://www.elma-bpm.ru/KB/article-6651.html
#region
#region
#region
#region
11.07.2023, 12:24
[ELMA3] Стандарты написания программного кода на языке C#
Стр. 33 из 33
https://www.elma-bpm.ru/KB/article-6651.html
11.07.2023, 12:24
Скачать