Overview
The first release of ReSharper (R#) provoked a commotion, at least between my programming fellowships. Expressions like "Visual Studio is a great development tool, but with ReSharper is awesome" were commonly repeated.
The main reason of R# success was that the JetBrains team identified a weak point of the Visual Studio coding editor.
Visual Studio, at least in it's firsts versions (.NET versions, 2003, 2005), had no refactoring features, just like other Java IDEs already had, such as Eclipse or IntelliJ. Also note that the last two versions of Visual Studio improved it's refactoring features but nothing come close with the power of the R#.
But I will not to talk about R# history, actually the preceding paragraph could be not totally accurate. I don't really know how R# was born. (If you know it, don't doubt, just comment it here, allow me to be in the know)
R# as coding workflow guidance
The R# quick fix and/or context action is very simple and powerful workflow. Basically you can locate the caret position near to an element that you want to alter, press Alt + Enter, and all available suggestions will be displayed. For instance, if you press Alt + Enter in a range corresponding to a "public" modifier of a property, the suggestions "To internal", "To protected" or "To private" would be available, only the options that do not provoke a broken usage are displayed.
{caret}public string FirstName { get; set; }
But all scenarios are not covered by R#, there are tons of frameworks and/or toolkit that have it own coding workflows.
Catel coding workflow
If you are writing a WPF or Silverlight application and don't use Catel, it is probably that you are not using the right library. See the comparison sheet, for detailed libraries comparison.
But Catel has a "down side". If you want to convert a simple class into a data or model class in order to support property changed notifications and validations, you need re-coding a class like this one:
public class Person { public string FirstName { get; set; } public string MiddleName { get; set; } public string LastName { get; set; } }
into this one:
public class Person { public static readonly PropertyData FirstNameProperty = RegisterProperty("FirstName", typeof(string)); public static readonly PropertyData LastNameProperty = RegisterProperty("LastName", typeof(string)); public static readonly PropertyData MiddleNameProperty = RegisterProperty("MiddleName", typeof(string)); public string FirstName { get { return this.GetValue<string>(FirstNameProperty); } set { this.SetValue(FirstNameProperty, value); } } public string LastName { get { return this.GetValue<string>LastNameProperty); } set { this.SetValue(LastNameProperty, value); } } public string MiddleName { get { return this.GetValue<string>(MiddleNameProperty); } set { this.SetValue(MiddleNameProperty, value); } } }
As you could be noticed, there is an implementation pattern that should be fully automated. In fact, every Catel version comes with a code snippets package that assist you to write down this class from scratch.
But now, Catel team comes with a new tool. Using the R# SDK, we implement a R# extension that cover the Catel coding workflow and we named CatelR# (obviously).
Now you can do this
You can also do it faster with the R# generation options (Alt + Ins)
The beta version, of CatelR#, is released. You can read more about CatelR# and download the beta. We are expecting for your feedback and new features request.
Enjoy it, and have nice coding experience with CatelR#.