Comme c'est MyClass x = 120;
, est-il possible de créer une telle classe personnalisée? Si oui, comment puis-je faire cela?Comment puis-je convertir implicitement une autre structure à mon type?
Répondre
Il est généralement considéré comme une mauvaise idée d'utiliser des opérateurs implicites, car ils sont, après tout, implicite et courir derrière votre dos. Le code de débogage jonché de surcharges de l'opérateur est un cauchemar. Cela dit, quelque chose comme ceci:
public class Complex
{
public int Real { get; set; }
public int Imaginary { get; set; }
public static implicit operator Complex(int value)
{
Complex x = new Complex();
x.Real = value;
return x;
}
}
vous pouvez utiliser:
Complex complex = 10;
ou vous pourriez jamais surcharger l'opérateur +
public static Complex operator +(Complex cmp, int value)
{
Complex x = new Complex();
x.Real = cmp.Real + value;
x.Imaginary = cmp.Imaginary;
return x;
}
et utiliser le code
complex +=5;
Je ne sais pas si cela est ce que vous voulez, mais vous pouvez y arriver en mettant en œuvre l'opérateur implicite: http://msdn.microsoft.com/en-us/library/z5z9kes2(VS.71).aspx
Créer un opérateur implicite:
http://msdn.microsoft.com/en-us/library/z5z9kes2.aspx
Par exemple:
public struct MyStruct // I assume this is what you meant, since you mention struct in your title, but use MyClass in your example.
{
public MyClass(int i) { val = i; }
public int val;
// ...other members
// User-defined conversion from MyStruct to double
public static implicit operator int(MyStruct i)
{
return i.val;
}
// User-defined conversion from double to Digit
public static implicit operator MyStruct(int i)
{
return new MyStruct(i);
}
}
"Est-ce une bonne idée?" est discutable. Les conversions implicites tendent à briser les normes acceptées pour les programmeurs; généralement pas une bonne idée. Mais si vous faites une bibliothèque de grande valeur, par exemple, ce pourrait être une bonne idée.
oui, voici un court exemple ...
public struct MyCustomInteger
{
private int val;
private bool isDef;
public bool HasValue { get { return isDef; } }
public int Value { return val; } }
private MyCustomInteger() { }
private MyCustomInteger(int intVal)
{ val = intVal; isDef = true; }
public static MyCustomInteger Make(int intVal)
{ return new MyCustomInteger(intVal); }
public static NullInt = new MyCustomInteger();
public static explicit operator int (MyCustomInteger val)
{
if (!HasValue) throw new ArgumentNullEception();
return Value;
}
public static implicit operator MyCustomInteger (int val)
{ return new MyCustomInteger(val); }
}
Ne voulez-vous pas dire implicite plutôt qu'explicite? – ChrisF
Lequel? Les deux sont là ... 'implicite' est pour quand il n'y a aucune chance que la distribution puisse échouer ... 'explicite' est pour quand elle peut échouer ... –
Ah, mon erreur. Je m'attendais à ce que les deux soient «implicites», ce qui serait le cas si vous pouviez lancer les deux façons sans vérifier. – ChrisF
- 1. Impossible de convertir implicitement le type
- 2. Impossible de convertir implicitement le type « System.Collections.Generic.List » à « System.Collections.Generic.List
- 3. Impossible de convertir implicitement le type « System.Web.HttpPostedFile » à « System.Web.HttpPostedFileBase »
- 4. Impossible de convertir implicitement le type ... à ... problème
- 5. Impossible de convertir une ... implicitement liste
- 6. comment faire subonic convertir une chaîne à mon personnalisé Type
- 7. Comment convertir une structure de type gdi + bitmap en HDC?
- 8. Erreur: impossible de convertir implicitement le type 'void' en 'System.Collections.Generic.List'
- 9. C# Impossible de convertir implicitement le type 'string' en 'System.IO.StreamReader
- 10. C# - Passer une structure d'un objet à un autre
- 11. Tout avantage à utiliser implicitement type var
- 12. Comment faire pour convertir une structure C++ en structure C#
- 13. LINQ: ne peut pas convertir implicitement le type « System.Collections.Generic.IEnumerable <int> » à « int »
- 14. Comment convertir implicitement Tuples en vectoriel dans Scala
- 15. Impossible de convertir implicitement type chaîne de caractères à string [] dans la méthode autocomplete
- 16. C# ne peut pas convertir implicitement le type T de type T
- 17. Transformer la structure XML à une autre structure xml
- 18. Impossible de convertir implicitement le type 'System.Collections.Generic.IEnumerable <AnonymousType # 1>' à « System.Collections.Generic.List <string>
- 19. Comment déterminer si Type est une structure?
- 20. Impossible de convertir implicitement chaîne à zone de texte
- 21. structure de copie qui contient une autre structure
- 22. Convertir structure JSON
- 23. Impossible de convertir implicitement le type IEnumerable <T> en IQueryable <T>
- 24. Accès à une autre structure par valeur ou par pointeur
- 25. Erreur sur l'instruction if - impossible de convertir implicitement le type en 'bool'
- 26. Convertir une variable en un type représenté par une autre variable Type?
- 27. Vous ne pouvez pas convertir implicitement le type 'System.Linq.IQueryable <Project.Models.TaskTimeLine>' en 'Project.Models.TaskTimeLine'
- 28. Impossible de convertir implicitement le type void en IList <int>
- 29. convertir la structure C à la structure Matlab
- 30. Impossible de convertir implicitement le type 'System.Linq.IQueryable <int>' en 'int?'
Honnêtement, j'ai lu l'opérateur impitoyable sur MSDN mais je ne pouvais pas l'implémenter à cause d'une erreur. Maintenant, je l'ai testé votre code et cela fonctionne.Merci – Freshblood
Je suis heureux d'avoir aidé. – SWeko