Как я могу гарантировать класс, чтобы иметь статическое свойство при помощи интерфейса или краткого обзора?

Можно увеличить размер кучи, выделенный JVM в eclipse напрямую. В eclipse IDE goto

Run ----> Run Configurations ----> Аргументы

Введите -Xmx1g (Он используется для установки максимального размера, такого как Xmx256m или Xmx1g ...... m -> mb g ---> gb)

27
задан pencilCake 14 March 2010 в 22:44
поделиться

6 ответов

Вы не можете этого сделать. Интерфейсы, абстрактные и т. Д. Не могут применяться к статическим членам. Если вы хотите сделать это, вам придется вручную не забыть сделать это для всех производных классов.

Кроме того, статические члены наследуются производными классами. Дочерние классы должны скрывать статический родительский член, если они хотят указать альтернативное поведение.

27
ответ дан 28 November 2019 в 05:32
поделиться

Почему бы не сделать make MyParameterNames Virtual и переопределить их в производных классах, чтобы вызвать исключение

public abstract class BaseClass
{
    public virtual List<string> MyParameterNames
    {
        get;
    }
}

public class DerivedClass : BaseClass
{
    public override List<string> MyParameterNames
    {
        get
        {
            throw new Exception();
        }
    }
}
0
ответ дан user2882522 28 November 2019 в 05:32
поделиться

В любом случае это не имеет смысла, поскольку у вас не было бы возможности получить доступ к этому статическому свойству без определения типа, что в любом случае нарушает весь смысл наличия интерфейса.

Я бы просто поместил свойство в интерфейс и направил его статическому члену.

public interface IMyInterface
{
    void Foo();
    IList<string> Properties { get; }
}

public class ConcreteClass : IMyInterface
{
    public void Foo(){}
    public IList<string> Properties
    {
        get { return s_properties; }
    }
}

Но это подводит меня ко второму вопросу - чего вы пытаетесь достичь? Зачем вам нужен статический член в классе? Что вам действительно нужно, так это дать объекту возможность определить, какими свойствами он обладает, верно? Так зачем вашему коду заботиться о том, хранятся ли они статически или для каждого экземпляра?

Похоже, вы путаете контракт (то, что вы хотите делать) с реализацией (как поставщик услуги достигает цели).

7
ответ дан 28 November 2019 в 05:32
поделиться

Вы можете в конструкторе для MyBase вызвать GetType () и использовать отражение для обеспечения производного класс имеет правильное свойство. Очевидно, это будет происходить только во время выполнения, но я не совсем уверен, в чем будет смысл этого ограничения: какой вред, если статического свойства нет?

0
ответ дан 28 November 2019 в 05:32
поделиться

Это невозможно. Наследование нельзя применить к членам типа (статическим членам).

0
ответ дан 28 November 2019 в 05:32
поделиться

Хорошо. Возможно, я не был достаточно ясен. Но я достиг того, что мне нужно, сделав примерно следующее:

public abstract myBaseClass
{
 public List<string> MyParameterNames
   {
     get 
         {
             throw 
               new ApplicationException("MyParameterNames in base class 
                                 is not hidden by its child.");
         }
   }
}

Таким образом, любой класс, производный от этого класса, будет выбрасывать исключение, если свойство MyParameterNames попытается достичь имен параметров этого производного класса.

Это не идеальный способ, но он в какой-то мере помогает мне решить мою проблему.

3
ответ дан 28 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: