Я работаю через код Josh Smith CommandSink, очевидно, ничего не понимаю о ключевом слове "as" в С#.
Я не понимаю, почему он написал строку:
IsValid = _fe != null || _fce != null;
так как ему нужно было только написать:
IsValid = depObj != null;
Так как это никогда не будет, _fe будет null и _fce не null, или наоборот, не так ли? Или мне не хватает чего-то о том, как "как" отличает переменные?
class CommonElement
{
readonly FrameworkElement _fe;
readonly FrameworkContentElement _fce;
public readonly bool IsValid;
public CommonElement(DependencyObject depObj)
{
_fe = depObj as FrameworkElement;
_fce = depObj as FrameworkContentElement;
IsValid = _fe != null || _fce != null;
}
...
Ответ:
Ответ - это то, что Марк сказал в своем комментарии ", что является всей точкой" как "- он не будет генерировать исключение - он просто сообщает null."
и здесь доказательство:
using System;
namespace TestAs234
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
Employee employee = new Employee();
Person.Test(customer);
Person.Test(employee);
Console.ReadLine();
}
}
class Person
{
public static void Test(object obj)
{
Person person = obj as Customer;
if (person == null)
{
Console.WriteLine("person is null");
}
else
{
Console.WriteLine("person is of type {0}", obj.GetType());
}
}
}
class Customer : Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
class Employee : Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}