В Ваших отчетах, где заголовок не повторяется, Вы удаляли строку заголовка по умолчанию в tablix в какой-либо точке? После того как я сделал это, независимо от того, что, устанавливая я попробовал, заголовок в tablix не повторится. Я должен был воссоздать tablix, чтобы заставить это работать.
Да, для этого обычно используются статические вспомогательные классы.
Кроме того, в C # 3 вы можете объявить метод следующим образом:
public static string RemoveFirstLine(this string s) {
...
}
, чтобы сделать его методом расширения. Затем вы можете вызвать его для любой строки, как если бы метод был объявлен для самого строкового типа.
В этом случае можно использовать расширения. Он буквально добавляет вашу функцию к возникновению. Только вот в 2008 году статический метод сделать нельзя.
Будьте осторожны!
Общие служебные функции, которые являются сквозными, должны находиться в пространстве имен служебных программ более высокого уровня. Синтаксический анализ строк, манипулирование файлами и т. Д.
Объекты расширения должны находиться в своем собственном пространстве имен.
Служебные функции, которые применяются к заданному набору бизнес-объектов или методов, должны находиться в пространстве имен этих объектов. Часто с суффиксом Helper, например BusinessObjectHelper. Здесь важно именование . Вы создаете контейнер для разных методов, или было бы разумнее сгруппировать их в специализированные объекты, например, парсер?
Я не думаю, что для этого есть стандарт. Я обычно делаю статический класс под названием BlahUtil. Для вашего примера я бы сделал его статическим методом на StringUtil
. Это помогает мне сгруппировать связанные методы в разумные единицы, облегчая их обнаружение и совместное использование между командами.
Затем вы также можете выбрать, какие из этих методов будут доступны как методы расширения (начиная с C # 3.0):
public static class StringUtil
{
public static string RemoveFirstLine(this string multiLineString)
{
// ...
}
}
Обычно я создаю статический класс Helper или Utility, а затем помещаю туда соответствующие вспомогательные функции.
Кроме того, я стараюсь логически сгруппировать классы Helper и Utility - помещая функции анализа текста наряду с функциями преобразования объектов бессмысленна. Путаница устраняется с помощью классов TextUtils и ConversionUtils.
Если вы используете C # 3.0, вы можете захотеть рассмотрите возможность использования метода расширения!
public static class StringExtensions
{
public static string RemoveFirstLine(this string myString)
{
return myString.Remove("line..!");
}
}
Затем в коде вы можете сделать это:
string myString = "Hello World etc";
string removedLineString = myString.RemoveFirstLine();
Обычно я создаю класс Utilities и определяю статические вспомогательные методы.
Я сделал статические «вспомогательные» классы, но после некоторого анализа; этот тип вспомогательной функции всегда заканчивается реализацией отдельного класса. В вашем случае у вас будет класс «базового парсера текста» и производный класс, который переопределяет метод «синтаксического анализа».
Я бы создал статический рабочий класс для таких функций. Может быть, не лучший способ, но тот, который упрощает жизнь ...;)
K
Вы можете использовать класс со статическими методами. Что-то вроде ParserUtils.RemoveFirstLine (). В .NET 3.5 и выше вы иногда можете использовать методы расширения, когда ваши служебные функции связаны с классом, который вы не можете изменить, например класс String. Intellisense покажет метод расширения для любого строкового объекта в проекте.