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);
        }

참고문헌


  • . NET의 엔터프라이즈 애플리케이션 아키텍처 제 2 판 (Microsoft 공식 공식 설명서)

  • 이상.

    좋은 웹페이지 즐겨찾기