let videoId = SuperPlayerVideoId()
videoId.fileId = “a”
videoId.psign = “b”
model.videoId = videoId
model.appId = 1
可以播放视频
let auth = TXPlayerAuthParams()
auth.fileId = "a"
auth.appId = 1
auth.sign = “b”
let ds = TXVodDownloadDataSource()
ds.auth = auth
txDownloader?.startDownload(ds)
下载失败:鉴权失败
fileid,appid,签名确定相同
将对象引用与字符串进行比较时(即使对象引用是指字符串),==特定于字符串类的运算符的特殊行为也会被忽略。
通常(不处理字符串时),Equals比较值,同时==比较对象引用。如果你正在比较的两个对象是指同一个对象的确切实例,那么两者都将返回true,但是如果一个具有相同的内容并且来自不同的源(是具有相同数据的单独实例),则只有Equals会返回true。但是,正如注释中所指出的那样,字符串是一种特殊情况,因为它覆盖了==操作符,所以当纯粹处理字符串引用(而不是对象引用)时,即使它们是单独的实例,也只会比较这些值。以下代码说明了行为中的细微差别:
string s1 = "test";
string s2 = "test";
string s3 = "test1".Substring(0, 4);
object s4 = s3;
Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s2), s1 == s2, s1.Equals(s2));
Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s3), s1 == s3, s1.Equals(s3));
Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s4), s1 == s4, s1.Equals(s4));
输出是:
True True True
False True True
False False True
当==用于表达式类型时object,它将解析为System.Object.ReferenceEquals。
Equals只是一种virtual方法,并表现如此,所以被覆盖的版本将被使用(其中,string类型比较的内容)。