How to Define a Method

Identify the problem => Define the single purpose => Specify the inputs and outputs => State any assumptions => Consider the error that could occur

Build a Method

Signature

public bool PlaceOrder(Product product, int quantity)

Optional accessibility modifier (Default is private)

Return type (void if no value)

Method name

Parameter list (Empty parenthesis if no parameters)

XML Document Comment

Use ///

Summary for method purpose

param for a description of each parameter

Signature Best Practices

Do:

Use a verb

Define the most restricted accessibility possible

Keep the number of parameters to a minimum

Define an XML document comment

Avoid:

Vague terms

Abbreviations

Conjunctions (and/or)

Inconsistent naming

Method Body

public bool PlaceOrder(Product product, int quantity)
{
// Guard Clause (garbage in,not garbage out)
if (product == null) throw new ArgumentNullException(nameof(product));
if (quantity <= ) throw new ArgumentOutOfRangeException(nameof(quantity));
}

Best Practices

Do:

Keep methods short (less than 20 lines)

Use white space

Use guard clause

Return an expected result (Use an object to return multiple values)

Implement exception handling

Avoid:

void methods

Property or Method

Property example:

ProductName, Description, InventoryCount?, SuggestedPrice?

Method example:

PlaceOrder(), CalculateInventoryCount()?, CalculateSuggestedPrice()?

Property:

Does it describe data?

Does it execute quickly?

Method:

Does it describe processing?

Does it produce side effects?

Does it require parameters?

Method Overloading

public bool PlaceOrder(Product product, int quantity)

public bool PlaceOrder(Product product, int quantity, DateTimeOffset deliveryBy)

public bool PlaceOrder(Product product, int quantity, DateTimeOffset deliberyBy, string instructions)

public void PlaceOrder(Product prouct, int quantity) ** Not a valid overloading

Best Practices

Do:

Keep the number of parameters to a minimum

Keep the order of the parameters consistent

Define a XML document comment for each overload

Consider optional parameters

Avoid:

Confusing overloads

Overloads that differ in purpose

(Example: OrderItems. One overload get the ordered items, the second overload orders a set of items)

Duplicating code

Method chaining

public OperationResult PlaceOrder(Product product, int quantity)
{
return PlaceOrder(product, quantity, null, null);
} public OperationResult PlaceOrder(Product product, int quantity, DateTimeOffset? deliverBy)
{
return PlaceOrder(product, quantity, deliverBy, null);
} public OperationResult PlaceOrder(Product product, int quantity, DateTimeOffset? deliverBy)
{
// All of the code here
}

Method Chaining Best Practices

Do:

Use to minimize repeated code in method overloads

Consider optional parameters

Avoid:

If it adds complexity

Method Overriding

We can override ToString() for each entity class to make debug easy

FAQ

1.What's the primary purpose of a method?

To implement the logic required for specific behavior or functionality in a class

2.What is the difference between a parameter and an argument?

A parameter is part of the method signature

An argument is part of the method call

3.What is method overloading?

Methods with the same name and purpose but different signatures.

4.What is method chaining?

One method overload calls another overload to prevent repeated code.

5.When is it the best to use method overloading vs. method overriding?

Use overloading when one method requires multiple signatures. Such as GetCustomer(id) to get a customer by id and GetCustomer(name) to get a customer by name.

Use overriding when replacing a method defined high up the object hierarchy. Such as replacing the ToString() method.

C# Best Practices - Creating Good Methods的更多相关文章

  1. C# Best Practices - Creating Good Properties

    Coding Properties Code in the Getter Check the user's credentials Check application state Format the ...

  2. OOP in JS Public/Private Variables and Methods

    Summary private variables are declared with the 'var' keyword inside the object, and can only be acc ...

  3. zookeeper kazoo Basic Usage

    http://kazoo.readthedocs.org/en/latest/basic_usage.html Basic Usage Connection Handling To begin usi ...

  4. 转: angular编码风格指南

    After reading Google's AngularJS guidelines, I felt they were a little too incomplete and also guide ...

  5. [转]JavaScript Namespaces and Modules

    Namespaces In most programming languages we know the concept of namespaces (or packages).Namespaces ...

  6. SAP HANA学习资料大全[非常完善的学习资料汇总]

    Check out this SDN blog if you plan to write HANA Certification exam http://scn.sap.com/community/ha ...

  7. Sonar 常用代码规则整理(一)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...

  8. 单元测试系列之九:Sonar 常用代码规则整理(一)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...

  9. Mocks Aren't Stubs

    Mocks Aren't Stubs The term 'Mock Objects' has become a popular one to describe special case objects ...

随机推荐

  1. C#学习日志 day 2 ------ 控制台颜色以及windowsphone 窗体应用试建

    成功跑起来了hello之后,试试改变背景颜色.

  2. springmvc定时器

    用到的jar包: aopalliance-1.0.jar commons-logging-1.1.3.jar spring-aop-3.2.4.RELEASE.jar spring-beans-3.2 ...

  3. css多行文本垂直居中问题研究

    css多行文本垂直居中问题研究 <body> <h2>垂直居中对齐</h2> <style> *{margin:0; padding:0;} div { ...

  4. 基于KVM建立虚拟机的步骤及总结说明

    1.前言 目前正在涉足云计算IaaS工作,虚拟化是IaaS的重要部分,因此这段时间对各个虚拟机化技术和工具进行研究,研究的目的不仅仅是为了会使用这个工具,而是通过研究了解技术的实现机制和原理,即知其然 ...

  5. 所有的GUI Toolkit,类型之多真开眼界

    The GUI Toolkit, Framework Page User interfaces occupy an important part of software development. Th ...

  6. 利用 Android Studio 和 Gradle 打包多版本APK

    在项目开发过程中,经常会有需要打包不同版本的 APK 的需求. 比如 debug版,release版,dev版等等. 有时候不同的版本中使用到的不同的服务端api域名也不相同. 比如 debug_ap ...

  7. 【Perl学习笔记】1.perl的ref 函数

    perl有引用的概念:一组数据实际上是另一组数据的引用.这些引用称为指针,第一组数据中存放的是第二组数据的头地址.引用的方式被用得相当普遍,特别是在面向对象的模块.函数的参数传递等常见.但perl对每 ...

  8. [每日一题] 11gOCP 1z0-052 :2013-09-17 DRA--Data Recovery Advisor.............................B31

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/11818529 正确答案:AD 数据库恢复顾问(DRA)是一个诊断和修复数据库问题的工具.共 ...

  9. kbengine Unity3d demo 代码执行流程(4)

    当服务端成功启动,客户端链接服务端后进入demo中的游戏界面,demo中的功能包括注册.登录.角色管理.战斗.场景等等. 对于新接触kbengine的人,看见客户端的代码后会觉得很迷茫,有些无从下手. ...

  10. node.weiChat

    微信的朋友圈分享是现在流行的推广模式,最近两天尝试了一下使用微信进行商品的分享,分享结束后我可以在自己的数据库中查询到用户是否分享成功,包括用户使用微信进行支付时的成功验证.个人觉得微信上的教程有些绕 ...