获取所有的子类

class Object
  def self.subclasses(direct = false)
    classes = []
    if direct
      ObjectSpace.each_object(Class) do |c|
        next unless c.superclass == self
        classes << c
      end
    else
      ObjectSpace.each_object(Class) do |c|
        next unless c.ancestors.include?(self) and (c != self)
        classes << c
      end
    end
    classes
  end
end
class A; end
class B < A; end
class C < B; end
class D < A; end
class E; end
class F < E; end

p E.subclasses  # => [F]
p B.subclasses  # => [C]
p A.subclasses(true).sort_by { |c| c.name }  # => [B, D]
p A.subclasses.sort_by { |c| c.name }  # => [B, C, D]

 

你可能感兴趣的:(C++,c,C#,F#)