On Wednesday, 21 November 2018 at 17:09:54 UTC, Neia Neutuladh
wrote:
On Wed, 21 Nov 2018 17:00:29 +0000, Alex wrote:
C# wouldn't reject the case above, would it?
C# *would* reject that (you can't call any methods on a null
object), but in D, it compiles and runs and doesn't segfault.
No, it wouldn't. And it doesn't.
´´´ C# ´´´
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace ConsoleApp1
{
sealed class C
{
public int dummy;
public void baz()
{
if (this is null)
{
Debug.WriteLine(42);
}
else
{
Debug.WriteLine(dummy);
}
}
}
class Program
{
static void Main(string[] args)
{
C c;
Random random = new Random(4);
int randomNumber = random.Next(0, 100);
if (randomNumber < 50)
{
c = new C
{
dummy = 73
};
}
else
{
c = null;
}
c.baz();
}
}
}
´´´
compiled against 4.6.1 Framework.
However, of course, there is a NullReferenceException, if c
happens to be null, when calling baz.
So the difference is not the compiler behavior, but just the
runtime behavior...
How could the compiler know the state of Random anyway, before
the program run.