Тип класса C# как параметр метода
public class SampleCass{
public void DoSomething(SampleCass sample){
//Do method implementation
}
}
В приведенном выше примере кода передаваемый тип параметра метода совпадает с классом, к которому принадлежит метод. Я хотел знать, почему это делается именно так, а также некоторые подробности о нем
заранее спасибо
5 ответов
Это может иметь, может использовать. Рассмотрим, например, класс Number (немой):
public class Number {
private readonly int _n = 0;
public Number(int n) { _n = n; }
public Number Add(Number other) {
return new Number(this._n + other._n);
}
}
Это потому, что этот метод использует экземпляр этого класса, отличный от своего собственного, чтобы что-то делать. Представьте, что у вас есть тип контакта и метод, который сравнивает его с другим контактом. Вы можете сделать это:
public class Contact
{
public string name;
public bool Compare(Contact c)
{
return this.name.Equals(c.name);
}
}
Ну, может быть много применений в зависимости от вашей проблемной области. Я могу привести еще один пример, где вы можете написать поля того же типа, что и класса.
например:
public class Node
{
public Node _next;
}
Я знаю, что ваш вопрос очень конкретный, но я подумал, что этот пример может повысить ценность текущего вопроса.
Если бы мне пришлось угадывать, я бы сказал, что это делается так, потому что метод внутри логики использует два экземпляра объекта - один, для которого вызывается метод (this), а другой - через параметр (sample). Если логика внутри метода не использует оба экземпляра объекта, что-то может быть сделано неправильно.
Надеюсь, это поможет, для более подробной информации нам нужно увидеть больше кода.
(Я даю пример конструктора, который поможет вам понять неконструктивные методы.)
Это может быть использовано для создания конструктора копирования, как
public class SampleCass
{
public int MyInteger { get; set;}
//Similarly other properties
public SampleClass(SampleClass tocopyfrom)
{
MyInteger = tocopyfropm.MyInteger;
//Similarly populate other properties
}
}
можно так назвать
SampleClass copyofsc = new SampleClass(originalsc);