您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
98 行
2.8 KiB
98 行
2.8 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.CompilerServices;
|
|
using Unity.UIWidgets.foundation;
|
|
|
|
namespace UIWidgetsSample
|
|
{
|
|
public abstract class Equatable : IEquatable<Equatable>
|
|
{
|
|
/// {@macro equatable}
|
|
public Equatable()
|
|
{
|
|
}
|
|
|
|
|
|
/// {@template equatable_props}
|
|
/// The list of properties that will be used to determine whether
|
|
/// two instances are equal.
|
|
/// {@endtemplate}
|
|
public abstract List<Object> props
|
|
|
|
{
|
|
get;
|
|
}
|
|
|
|
/// {@template equatable_stringify}
|
|
/// If set to `true`, the [toString] method will be overridden to output
|
|
/// this instance's [props].
|
|
///
|
|
/// A global default value for [stringify] can be set using
|
|
/// `EquatableConfig.stringify`.
|
|
///
|
|
/// If this instance's [stringify] is set to null, the value of
|
|
/// `EquatableConfig.stringify` will be used instead. This defaults to
|
|
/// `false`.
|
|
/// {@endtemplate}
|
|
// ignore: avoid_returning_null
|
|
bool? stringify
|
|
{
|
|
get
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
public static bool operator ==(Equatable left,Equatable right)
|
|
{
|
|
return left is Equatable && Equals(left, right) && Equals(left.props,right.props);
|
|
}
|
|
|
|
public static bool operator !=(Equatable left, Equatable right)
|
|
{
|
|
return !(left == right);
|
|
}
|
|
|
|
|
|
|
|
|
|
/* public override int GetHashCode() {
|
|
return (this.GetType().GetHashCode()) ^ mapPropsToHashCode(props);
|
|
}*/ // ????
|
|
|
|
public override string ToString() {
|
|
switch (stringify) {
|
|
case true:
|
|
return EquatableUtils.mapPropsToString(this.GetType(), props);
|
|
case false:
|
|
return this.GetType().ToString();
|
|
default:
|
|
return EquatableConfig.stringify == true
|
|
? EquatableUtils.mapPropsToString(this.GetType(), props)
|
|
: this.GetType().ToString();
|
|
}
|
|
}
|
|
|
|
public bool Equals(Equatable other)
|
|
{
|
|
if (ReferenceEquals(null, other)) return false;
|
|
if (ReferenceEquals(this, other)) return true;
|
|
return Equals(props, other.props);
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
if (ReferenceEquals(null, obj)) return false;
|
|
if (ReferenceEquals(this, obj)) return true;
|
|
if (obj.GetType() != this.GetType()) return false;
|
|
return Equals((Equatable) obj);
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return (props != null ? props.GetHashCode() : 0);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|