C#에서 코드 계약을 작성해 보았습니다 (사용했다고는 말하지 않음)
8428 단어 .NETFramework코드 계약C#계약
개요
. NET의 엔터프라이즈 애플리케이션 아키텍처 제 2 판 (Microsoft 공식 공식 설명서) 을 읽고 코드 계약이라는 것을 알았습니다.
그래서 실험하려고했지만 Visual Studio 2017에서 Code Contracts for .NET
를 사용할 수 없기 때문에 시도 할 수 없었습니다.
시도한 것
코드 계약 을 보면, CONTRACTS_FULL
가 정의되고 있을 필요가 있는 것 같다.
그래서 좋은 느낌에 Contract.Requires
를 추가해 보자.
/// <summary>
/// 割り算
/// </summary>
/// <param name="divisor">割られる数</param>
/// <param name="dividend">割る数</param>
/// <returns></returns>
private double div(double divisor, double dividend)
{
Contract.Requires(dividend != 0);
return divisor / dividend;
}
하지만 오류.
Extensions 넣기
Code Contracts for .NET 다운로드 및 설치.
[Code Contracts]ペイン
어디? ?
Works with
Visual Studio 2010, 2012, 2013, 2015
에··..
선인의 소스 코드
GitHub에서 사용법을 검색해 보았습니다.Requires
도, if-then-throw
도 쓰여져 있다.Contract
는 어디까지나 디버그용이었던 것일까? ?
지금은 더 이상 사용되지 않을까? ?
housnberg/inf3project/game/game/client/Connector.cs
public void connect(String ip, UInt16 port)
{
Contract.Requires(ip != null);
Contract.Requires(ip.Length > 6);
Contract.Requires(ip.Length < 16);
Contract.Requires(port >= 0);
Contract.Requires(port <= 65535);
try
{
if (ip == null || ip.Length > 16 || ip.Length < 7)
{
throw new ArgumentException("parameter cannot be null and parameter length must be bigger 7 and smaller 16");
}
else
{
if (client == null || !client.Connected)
{
client = new TcpClient(ip, port);
buffer.clear();
}
else
{
throw new SystemException("the client is already connected!");
}
Console.WriteLine("client connected");
}
}
catch (Exception exeption)
{
Console.WriteLine(exeption.Message);
}
Contract.Ensures(client != null);
Contract.Ensures(client.Connected);
Contract.Ensures(receiverThread.IsAlive);
}
참고문헌
/// <summary>
/// 割り算
/// </summary>
/// <param name="divisor">割られる数</param>
/// <param name="dividend">割る数</param>
/// <returns></returns>
private double div(double divisor, double dividend)
{
Contract.Requires(dividend != 0);
return divisor / dividend;
}
public void connect(String ip, UInt16 port)
{
Contract.Requires(ip != null);
Contract.Requires(ip.Length > 6);
Contract.Requires(ip.Length < 16);
Contract.Requires(port >= 0);
Contract.Requires(port <= 65535);
try
{
if (ip == null || ip.Length > 16 || ip.Length < 7)
{
throw new ArgumentException("parameter cannot be null and parameter length must be bigger 7 and smaller 16");
}
else
{
if (client == null || !client.Connected)
{
client = new TcpClient(ip, port);
buffer.clear();
}
else
{
throw new SystemException("the client is already connected!");
}
Console.WriteLine("client connected");
}
}
catch (Exception exeption)
{
Console.WriteLine(exeption.Message);
}
Contract.Ensures(client != null);
Contract.Ensures(client.Connected);
Contract.Ensures(receiverThread.IsAlive);
}
이상.
Reference
이 문제에 관하여(C#에서 코드 계약을 작성해 보았습니다 (사용했다고는 말하지 않음)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hydrangeas/items/a3e2271ca31b9bc4a158텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)