C# 中一些類關係的斷定方法

1.  IsAssignableFrom實例方法 判斷一個類或者接口是否繼承自另外一個指定的類或者接口。

public interface IAnimal { }
public interface IDog : IAnimal { }
public class Dog : IDog { }
public class Cate : IAnimal { }
public class Parrot { }
    	
var iAnimalType = typeof(IAnimal);
var iDogType = typeof(IDog);
var dogType = typeof(Dog);
var cateType = typeof(Cate);
var parrotType = typeof(Parrot);

Console.WriteLine(iAnimalType.IsAssignableFrom(iDogType)
    ? $"{iDogType.Name} was inherited from {iAnimalType.Name}"
    : $"{iDogType.Name} was not inherited from {iAnimalType.Name}");

Console.WriteLine(iAnimalType.IsAssignableFrom(dogType)
    ? $"{dogType.Name} was inherited from {iAnimalType.Name}"
    : $"{dogType.Name} was not inherited from {iAnimalType.Name}");

Console.WriteLine(iDogType.IsAssignableFrom(dogType)
    ? $"{dogType.Name} was inherited from {iDogType.Name}"
    : $"{dogType.Name} was not inherited from {iDogType.Name}");

Console.WriteLine(iAnimalType.IsAssignableFrom(cateType)
    ? $"{cateType.Name} was inherited from {iAnimalType.Name}"
    : $"{cateType.Name} was not inherited from {iAnimalType.Name}");

Console.WriteLine(iAnimalType.IsAssignableFrom(parrotType)
    ? $"{parrotType.Name} inherited from {iAnimalType.Name}"
    : $"{parrotType.Name} not inherited from {iAnimalType.Name}");
Console.ReadKey();

輸出結果:spa

IDog was inherited from IAnimal
Dog was inherited from IAnimal
Dog was inherited from IDog
Cate was inherited from IAnimal
Parrot not inherited from IAnimalcode

2.IsInstanceOfType 判斷某個對象是否繼承自指定的類或者接口

Dog d=new Dog();
var result=typeof(IDog).IsInstanceOfType(d);
Console.WriteLine(result? $"Dog was inherited from IDog": $"Dog was not inherited from IDog");
Console.ReadKey();

輸出結果:對象

Dog was inherited from IDog繼承

3.IsSubclassOf 判斷一個對象的類型是否繼承自指定的類,不能用於接口的判斷,這能用於斷定類的關係

public interface IAnimal { }
public interface IDog : IAnimal { }
public class Dog : IDog { }
public class Husky : Dog { }
public class Cate : IAnimal { }
public class Parrot { }
Husky husky = new Husky();
var result = husky.GetType().IsSubclassOf(typeof(Dog));
Console.WriteLine(result ? $"Husky was inherited from Dog" : $"Husky was not inherited from Dog");

輸出結果:接口

Husky was inherited from Dogit

這個方法不能用於接口,若是穿接口進去永遠返回的都是falseclass

Dog dog = new Dog();
var dogResult = dog.GetType().IsSubclassOf(typeof(IDog));
Console.WriteLine(dogResult);

結果:方法

falseim

相關文章
相關標籤/搜索