2015-07-28 8 views
-2

Просьба предложить мне лучший образец, который будет соответствовать потребностям ниже.Отдельный экземпляр без одноэлементного рисунка

Class Base 
{ 
    List<string> a; 
    List<string> b; 
    public Base() 
    { 
     //"Calling Base" 
    } 
} 
Class Der : Base 
{ 
    GetListA() 
    { 
     return a; 
    } 
    GetListB() 
    { 
     return b; 
    } 
} 
Class Der1 : Base 
{ 
    GetListA() 
    { 
     return a; 
    } 
    GetListB() 
    { 
     return b; 
    } 
} 

Main() 
{ 
    Der1 obj1 = new Der1(); 
    Der obj= new Der(); 
    obj.GetListA(); 
    obj.GetListB(); 
    obj1.GetListA(); 
    obj1.GetListB(); 
} 

, когда я использую obj1 или obj2, в настоящее время конструктор базового класса становится вызывается каждый раз, когда создается новый объект.

Base класс генерирует, говорят 10k записей. Я хочу, чтобы это генерировалось только один раз и удерживало его для повторного использования другими.

Его чисто веб-серверное приложение и мое приложение не принимают никаких статических переменных/объектов или одноэлементного класса. Без этого мне нужно выполнить эту задачу.

Есть ли способ достичь этого?

+5

Объясните, почему вы не можете имеют статические переменные? Что это означает, что веб-сервер связан с этим утверждением? – Jashaszun

+0

Мое существующее приложение будет всюду по ошибке, если я использую статические методы, переменные – user1581317

+0

И почему * не будет * вы ожидаете, что будет вызван конструктор базового класса? Оба объекта основаны на нем, поэтому, конечно, это будет вызвано. Так работает наследование объектов. –

ответ

0

Нечто подобное с использованием статической переменной является использование Application property

Вы можете использовать свойство, как это аннулирует создание нескольких экземпляров вашего класса

public SomeClass Instance 
{ 
    get 
    { 
      if (Application["SomeClassInstance"] == null) 
      { 
       Application["SomeClassInstance"] = new SomeClass(); 
      } 
      return (SomeClass)Application["SomeClassInstance"]; 
    } 
} 
+0

Проблема, с которой я столкнулся, - База классов { } Класс Derv1: Base { void Run(); } Класс Derv2: base { void Run(); } Run() создает огромное количество записей. Поэтому я хочу создать метод Run(), который будет выполняться только один раз независимо от того, как он был получен в моем классе. Я не могу создать singleton - это условие. – user1581317

0
Class Base 
{ 
    static List<string> a; 
    static List<string> b; 
    public Base() 
    { 
     if(this.a == null) 
     { 
      a = database.GetListitemsForA(); 
     } 

     if(this.b == null) 
     { 
      b = database.GetListitemsForB(); 
     } 

    } 
} 
Смежные вопросы