2015-11-03 14 views
0

Я читал несколько уроков по C#, и вдруг мне кажется, что я никогда не пытался использовать объект-класс в качестве параметра при создании метода.C# Передача класса объекта в качестве параметра метода

К примеру, я никогда бы не подумал об этом:

static void GiveBookAName(Gradebook book, string bookName) 
{ 
    book.Name = bookName; 
} 

Я уверен, что я сделал бы что-то вроде этого:

public void GiveBookAName(string bookName) 
{ 
    Name = bookName; 
} 

//in other class 
Gradebook book = new Gradebook() 
book.GiveBookAName("TheGradebook"); 

Из-за этого, я, как правило, создание экземпляра класса здесь и там. Я имел в виду, что если мне нужно получить доступ к классу X в классе A & B, я создам экземпляр класса X как в классе A & B. Теперь я понимаю, что если я начну передавать класс объекта в качестве параметра, у меня могут быть все мои экземпляры в одно место (обычно класс с Main()). Это необходимо?

+0

Скажите что? В вашем первом примере имеет смысл передать 'book', потому что иначе метод не может принять меры.Однако в вашем втором примере «Книга», по-видимому, является членом одного и того же класса, поэтому метод не требует передачи объекта - метод может получить к нему доступ напрямую. Эти два случая сильно отличаются друг от друга. Если вы все время проходите объекты, то, вероятно, у вас плохой дизайн. –

ответ

0

Все зависит от контекста. Общее правило такого рода: , если вы считаете, что имеет смысл сделать это, тогда сделайте это.

В вашем методе наименования книг я не думаю, что вы должны передать книгу в качестве параметра. Пользователи вашего API должны быть в состоянии назвать книги с помощью этого:

book.Name = someStuff; 

Таким образом, вы не должны книга именования метод в другом классе, потому что почему это должно быть? Другой класс не несет ответственности за написание книги, не так ли? Тогда пусть книга сделает это! Поместите метод именования в класс Book.

На самом деле, я действительно не передаю класс объекта в качестве параметра. Я думаю, что это «функциональный» способ делать вещи, а не объектно-ориентированные.

Давайте посмотрим на другую ситуацию. Вы используете класс с именем X в основной библиотеке, и вы хотите добавить метод к X. Теперь вы можете подумать, что вы должны передать объект X методу, подобному методу Book, потому что вы, конечно же, не можете редактировать класс в основной библиотеке! Итак, это ваш метод:

public void DoStuffWithX(X x, int param) { 

} 

И вы ставите это в другой класс. Ну так как C# 3, методы расширения добавляются так что вы можете сделать что-то вроде этого:

public static void DoStuff (this X x, int param) { 

} 

Теперь вы можете вызвать этот метод с X объекта!

x.DoStuff(10); 

Кроме того, я вижу, что вы всегда должны создать экземпляр класса вы получаете доступ к методу. По характеру этих методов «передать объект класса как параметр» им не нужно создавать экземпляр перед вызовом. Другими словами, вы должны отметить их static, так что вы можете назвать это так:

YourClassName.SomeMethod (parameter); 

вместо:

YourClassName obj = new YourClassName(); 
obj.SomeMethod (parameter); 
Смежные вопросы