[英]Cannot instantiate a generic class
I have an Interface 我有一个界面
public interface ICrypto<T> : IDisposable
{
ICryptoTransform GetDecryptor();
ICryptoTransform GetEncryptor();
T GetAlgorithm();
}
I have an implementation 我有一个实现
public class TripleDESCryptoProvider : ICrypto<TripleDESCryptoServiceProvider>
{
public TripleDESCryptoProvider() { }
public ICryptoTransform GetDecryptor()
{
return GetAlgorithm().CreateDecryptor();
}
public ICryptoTransform GetEncryptor()
{
return GetAlgorithm().CreateEncryptor();
}
public TripleDESCryptoServiceProvider GetAlgorithm()
{
...
}
public void Dispose()
{
throw new NotImplementedException();
}
}
i have a class that implements implementation above 我有一个实现上面的实现的类
public class CryptoWork<T> where T : ICrypto<T>, new()
{
protected static T _keyStore;
public static T KeyStore
{
get
{
if (_keyStore == null)
{
_keyStore = new T();
}
return _keyStore;
}
}
/// <summary>
/// Encrypt a byte array
/// </summary>
public string Encrypt(string input)
{
byte[] inputArray = UTF8Encoding.UTF8.GetBytes(input);
using (var encryptor = KeyStore.GetEncryptor())
{
return Convert.ToBase64String(encryptor.TransformFinalBlock(inputArray, 0, inputArray.Length));
}
}
/// <summary>
/// Decrypt a byte array
/// </summary>
public string Decrypt(string input)
{
byte[] inputArray = Convert.FromBase64String(input);
using (var encryptor = KeyStore.GetDecryptor())
{
return UTF8Encoding.UTF8.GetString(encryptor.TransformFinalBlock(inputArray, 0, inputArray.Length));
}
}
}
I am having problem instantiating class CryptoWork<T> where T : ICrypto<T>, new()
: 我有问题实例化类
CryptoWork<T> where T : ICrypto<T>, new()
:
Neither 也不
var cryptoWork = new CryptoWork < ICrypto < TripleDESCryptoProvider > > ();
nor 也不
var cryptoWork = new CryptoWork < TripleDESCryptoProvider > ();
compiles. 编译。
You have specified: 您已指定:
CryptoWork<T> where T : ICrypto<T>, new()
and you are using 而你正在使用
new CryptoWork<TripleDESCryptoProvider>();
For that to work, we would need: 要实现这一目标,我们需要:
TripleDESCryptoProvider : ICrypto<TripleDESCryptoProvider>
(since T
= TripleDESCryptoProvider
) (因为
T
= TripleDESCryptoProvider
)
But you have: 但是你有:
TripleDESCryptoProvider : ICrypto<TripleDESCryptoServiceProvider>
and a public parameterless constructor (which you have). 和一个公共无参数构造函数(你有)。 Options:
选项:
TripleDESCryptoProvider : ICrypto<TripleDESCryptoProvider>
TripleDESCryptoProvider : ICrypto<TripleDESCryptoProvider>
CryptoWork
type have 2 generic type parameters; CryptoWork
类型有2个泛型类型参数; one for the TripleDESCryptoProvider
, another for the TripleDESCryptoServiceProvider
TripleDESCryptoProvider
,另一个用于TripleDESCryptoServiceProvider
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.