Other Posts in Data Types

  1. Replacing List
  2. Factory Pattern using Generics in C#
  3. Vector Class and Events in .Net
  4. Binary Trees in C# using Generics
  5. Priority Queue in C#
  6. Cheap Trick for Fluent Interfaces
  7. Building an DI Container

Cheap Trick for Fluent Interfaces

5/8/2011

I've been a bit on the quiet side as of late. The reason being that I've been sans computer for a bit. My computer went from working ok, to the DVD drive dying, the sound stopping, and finally the OS blowing up. So I figured that it was about time to get a new computer. Since I got the new computer, I've been lazy about setting up visual studio. Since that's the case I don't have much to share. I will have a rework of my ORM series pretty soon, but for the time being all I have is this bit of code.

One of the things that I'm working on for the rewrite of the ORM that I work on is a fluent interface. I'm not a huge fan of them myself, but I've been using as a way to do optional parameters in a nicer way. One of the things that I wanted to do was hide a couple of the default functions (ToString, GetType, etc.) from the intellisense popup. Basically I just wanted the functions from the fluent interface to show up. Finally after a bit of searching, I found that I can simply do this:

   1: /*
   2: Copyright (c) 2011 <a href="http://www.gutgames.com">James Craig</a>
   3: 
   4: Permission is hereby granted, free of charge, to any person obtaining a copy
   5: of this software and associated documentation files (the "Software"), to deal
   6: in the Software without restriction, including without limitation the rights
   7: to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   8: copies of the Software, and to permit persons to whom the Software is
   9: furnished to do so, subject to the following conditions:
  10: 
  11: The above copyright notice and this permission notice shall be included in
  12: all copies or substantial portions of the Software.
  13: 
  14: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15: IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16: FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17: AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  20: THE SOFTWARE.*/
  21:  
  22: #region Usings
  23: using System;
  24: using System.Collections.Generic;
  25: using System.Linq;
  26: using System.Text;
  27: using System.ComponentModel;
  28: #endregion
  29:  
  30: namespace Utilities.DataTypes.Patterns
  31: {
  32:     /// <summary>
  33:     /// Helps in fluent interface design to hide
  34:     /// ToString, Equals, and GetHashCode
  35:     /// </summary>
  36:     public interface IFluentInterface
  37:     {
  38:         #region Functions
  39:  
  40:         [EditorBrowsable(EditorBrowsableState.Never)]
  41:         bool Equals(object obj);
  42:  
  43:         [EditorBrowsable(EditorBrowsableState.Never)]
  44:         int GetHashCode();
  45:  
  46:         [EditorBrowsable(EditorBrowsableState.Never)]
  47:         string ToString();
  48:  
  49:         [EditorBrowsable(EditorBrowsableState.Never)]
  50:         Type GetType();
  51:  
  52:         #endregion
  53:     }
  54: }

This bit of code hides ToString, GetType, GetHashCode, and Equals functions. So I just inherit from this and it hides the functions... Except it doesn't in certain situations. Specifically I have to have my fluent interface and this class in a different solution from any code that uses the fluent interface. But assuming I do that, it works like a charm. So anyway, hopefully this helps you out somehow (I don't know who it would help out but whatever). So try it out, leave feedback, and happy coding.



Comments