Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:
Предположим, что у вас есть класс с именем Student.
public class Student
{
private string FirstName;
private string LastName;
public string GetFullName()
{
return FirstName + LastName;
}
}
Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.
public class StudentInfo
{
public string GetStudentName()
{
Student s;
string fullname = s.GetFullName();
return fullname;
}
}
Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.
Реальная, которая не отмечена как двойная точность, будет считаться одиночной точностью. Просто потому, что когда-нибудь позже вы назначите его переменной двойной точности или преобразуете ее в двойную точность, это не означает, что значение «магически» будет двойной точностью. Он не смотрит вперед, чтобы узнать, как будет использоваться значение.
Здесь есть несколько вопросов, поэтому полезно указать некоторые детали более подробно с примерами, особенно для новичков.
Как указано MRAB в его правильном ответе, выражение всегда оценивается без какого-либо контекста , поэтому
0.12345678901234567890
является плавающим литералом по умолчанию (одиночный), независимо от того, где он появляется. То же самое относится к числам с плавающей запятой в экспоненциальной форме
0.12345678901234567890E0
, это также номер точности по умолчанию.
Если вы хотите использовать постоянную с двойной точностью, можно использовать D
вместо E
в приведенной выше форме. Даже если такой константе двойной точности присваивается переменная точности по умолчанию, она сначала рассматривается как число двойной точности, а затем преобразуется в стандартную точность.
Способ, которым вы пользуетесь в своем вопросе (используя видная нотация и несколько констант вида) более общий и более современный, но принцип один и тот же.
0.12345678901234567890_sp
является рядом видов sp
и
0.12345678901234567890_dp
является номером вида dp
, и не имеет значения, где они появляются.
Как показывает ваш пример, речь идет не только о назначении. В строке
c = DBLE(0.12345678901234567890)
сначала число 0.12345678901234567890
является значением по умолчанию. Затем он преобразуется в двойную точность DBLE
, но это делается после того, как некоторые из цифр уже потеряны. Затем этому новому номеру двойной точности присваивается значение c
.