C # Const поле в абстрактном классе - PullRequest
3 голосов
/ 25 июня 2009

У меня проблемы с объявлением константного поля в абстрактном классе. Почему это?

редактировать

Я должен был уточнить. Моя проблема в том, что мои дочерние классы не могут видеть поле const:

protected const string Prefix = "dynfrm_";

Если я удалю ключевое слово const, я могу получить его из класса внуков.

Ответы [ 5 ]

4 голосов
/ 25 июня 2009
public abstract class Class1
{
    protected const string Prefix = "dynfrm_";
}

public class Class2 : Class1
{
    public void GetConst()
    {
        Console.WriteLine(Prefix);
    }
}
3 голосов
/ 25 июня 2009

Вот, пожалуйста ...

abstract class MyBase
{
    protected const int X = 10;
}
class Derived : MyBase
{
    Derived()
    {
        Console.WriteLine(MyBase.X);
    }
}
2 голосов
/ 25 июня 2009

Кажется, работает нормально:

public abstract class Class1
{
    protected const int Field1 = 1;
}

public class Class2 : Class1
{
    public int M1()
    {
        return Field1;
    }
}

Я использую Visual Studio 2008 с пакетом обновления 1 (SP1) и вижу защищенный const в IntelliSense от потомка, и он компилируется, как и ожидалось.

1 голос
/ 25 июня 2009

Вы сделали свою константу хотя бы защищенной? если он закрытый, он не будет доступен дочерним классам, как если бы он не был абстрактным классом.

Редактировать: Я вижу, вы опубликовали пример - и указали его как защищенный, что работает для меня. Есть описание того, что происходит? Не компилируется? ошибка времени выполнения?

0 голосов
/ 25 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...