Finding the number of capital letters in a word grouped by letter
The answer is that I wouldn't use either of those approaches. Counting the number of occurrences on a string isn't complex enough that requires a class of it's own. An extension method however would be a reasonable way to do it, as well as using the LINQ to get the desired result:

public static IDictionary&lt;char, int&gt; GetOcurrences(this string value){
    return value.GroupBy(c =&gt; c)
        .ToDictionary(c =&gt; c.Key, c =&gt; c.Count());
}


Or to count only letters

public static IDictionary&lt;char, int&gt; GetOcurrences(this string value){
    return value
        .Where(char.IsLetter)
        .GroupBy(c =&gt; c)
        .ToDictionary(c =&gt; c.Key, c =&gt; c.Count());
}


Or to count only capital letters

public static IDictionary&lt;char, int&gt; GetOcurrences(this string value){
    return value
        .Where(c =&gt; c &gt;= 'A' &amp;&amp; c &lt;= 'Z')
        .GroupBy(c =&gt; c)
        .ToDictionary(c =&gt; c.Key, c =&gt; c.Count());
}


Or to count only letters provided by a parameter

public static IDictionary&lt;char, int&gt; GetOcurrences(this string value, string filter){
    return value
        .Where(c =&gt; filter.Contains(c))
        .GroupBy(c =&gt; c)
        .ToDictionary(c =&gt; c.Key, c =&gt; c.Count());
}